代码之家  ›  专栏  ›  技术社区  ›  Sören Kuklau Keith Boynton

Windows窗体的所见即所得标记控件?

  •  5
  • Sören Kuklau Keith Boynton  · 技术社区  · 16 年前

    [我们有一个Windows窗体数据库前端应用程序,除其他外,它可以用作CMS;客户端创建结构,填充它,然后使用一个基于ASP.NET WebForms的站点在Web上公开显示结果。为了增加灵活性,它们有时被迫将实际HTML标记输入到文本字段中,然后作为数据库中的VARCHAR结束。这是可行的,但远不是用户友好的。]

    因此,一些客户需要一个HTML所见即所得编辑器。我想让他们相信,使用简单的语言(即降价)会使他们受益。理想情况下,我想要的是一个所见即所得的编辑器。他们不需要桌子,或任何复杂的东西。

    粗略的搜索显示 a .NET Markdown to HTML converter ,然后我们 a Windows Forms-based text editor that outputs HTML ,但显然没有什么能把两者结合在一起。因此,我们仍然可以在其中使用带有标记的varchar,但至少它可以很容易地被人阅读和解析。

    这是一个所见即所得的编辑器,输出Markdown,然后在ASP.NET中解析成HTML,这样做可行吗?有其他建议吗?

    4 回复  |  直到 5 年前
        1
  •  0
  •   Brad Wilson    16 年前

    @索伦,

    你完全可以在Windows窗体应用程序中嵌入带有Javascript标记编辑器的IE。

        2
  •  0
  •   KyleMit Steven Vachon    5 年前

    我认为最好的方法是

    1. Converting Markdown to HTML &安培;
    2. Displaying HTML in WinForms

    最新的降价图书馆似乎是 markdig 你可以安装 via nuget

    Nuget > Markdig

    一个简单的实现可能是:

    1. 添加 SplitContainer 给一个 Form 控件,设置 Dock = Fill
    2. 添加 TextBox ,设置 停靠=填充 并设置为 Multiline = True
    3. 添加 WebBrowser ,设置 停靠=填充

    然后处理 TextChanged 事件,将文本解析为html并设置为 DocumentText 这样地:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        var md = textBox1.Text;
        var html = Markdig.Markdown.ToHtml(md);
        webBrowser1.DocumentText = html;
    }
    

    以下是录制的演示:

    Demo screen share

        3
  •  -1
  •   Jared Updike    16 年前

    你不能用我在堆栈溢出中使用的(我们都在输入的)同一个控件——WMD,把标记存储在VARCHAR中。然后使用.NET Markdown to HTML转换器(如您所述)根据需要显示HTML。Jeff在StackOverflow播客中对此进行了更详细的讨论(不知道插曲编号)。

        4
  •  -1
  •   Jared Updike    16 年前

    RichTextBox控件

    所以你想使用降价但不想让用户知道?这可能不是一个可以实现的目标。我认为降价的意义在于它是面向那些愿意学习一点相当自然的语法并用纯文本(比如维基百科)编辑所有内容的作家的?有没有纯所见即所得的编辑器?可能。。。可能其他维基百科编辑也要来清理结果的标记和格式。如果你想让它对用户透明(如MS-Word),降价可能不是你想要的,也可能给你在这种情况下它所宣传的优势。

    输入在Windows窗体中发生

    哎呀!现在我更明白你的问题了。我想这取决于你的Windows窗体应用程序的外观,嵌入式IE控件是否像拇指一样突出。如果你尝试,你可能会发现你可以让它工作

    在你的位置上,我会尝试这样的事情:

    如果你不认为这种安排会很好地与你的用户(尤其是所有的编辑在纯文本窗口)然后再次我不认为降价是你的具体应用程序的答案。如果您认为您的用户热衷于编辑纯文本的想法,那么我打赌我们可以找到一个解决方案。请澄清?

    贾里德。

    (1)我成功地将IE HTML控件放入项目中,以显示一些生成的结果作为PDF(使用IE阅读器插件,如Adobe Reader或FXIT)。用户不知道GUI的那部分是IE控件,它只是显示PDF,允许打印和保存等。

    [2] …但删除边框,使两个拆分控件接触嵌入式IE控件的所有四个边缘,或者非常接近。。。例如,将其保持为浅灰色或白色,并消除IE控件的任何边框,使其与周围控件混合。也许把它放在它自己的标签页上,我向一个非技术用户提出挑战,让他告诉/关心它是一个HTML控件还是本机控件。

    我可能完全错了这一切(人们将不得不看到这个行动,以确定它是否会工作),但这可能比编写自己的交互式降价编辑器更容易。。。

    …实际上,要实现自己的C标记编辑器,只需在嵌入的IE控件旁边放置一个文本编辑框,并通过单独线程上的.NET标记->HTML转换器运行当前标记,然后替换IE控件中的HTML(假设标记->HTML转换器是非常自由和健壮的,不会抛出任何异常)。

        5
  •  -1
  •   devios1    16 年前

    “所见即所得标记”实际上是一个矛盾的说法,因为标记的全部目的是让您自然、直观地编写标记语法,然后将其后置处理为html, 除非 你的意思是,以**文本**为例,将其呈现为 **文本* *例如。这确实有点酷,但对于编号列表和项目符号列表之类的事情来说,这会变得非常困难,因为您必须完成所有的定位,但要保留基于实际文本字符(例如,“*”而不是项目符号)的所有内容,并支持正确的文本输入定位、退格等。

    • 例如,
    • 在这个项目符号列表中,
    • 子弹必须是星号,
    • 间距也不会真的存在。

    如果有人真的解决了这个问题,那肯定值得关注。