Windows窗体应用程序中的HTML电子邮件编辑器

时间:2008-08-12 08:20:15

标签: c# .net vb.net winforms controls

我们正在为我们的Windows应用程序(vb.net或c#)寻找WYSIWYG编辑器控件,以便用户可以在发送之前设计HTML电子邮件(使用dot net框架中的SMTP对象发送)。

目前我们可以找到的所有可用编辑器都存在以下问题之一:

a)他们依赖于mshtml.dll或网页浏览器控件,因为html代码和编辑器在Windows 2000(IE6)下不同步而证明我们不可靠

b)它们是基于Web的,而不是Windows窗体控件

c)他们将样式放在文档的头部(参见下面的注释)。

不幸的是,由于这个HTML email article描述了使HTML电子邮件与样式一起使用的唯一可靠方法是使用它们内联,现在似乎在许多编辑器中都不支持。

有没有人有这方面的经验或建议解决方案?

10 个答案:

答案 0 :(得分:3)

我一直在使用this one,它比WebBrowser略低,但仍然使用MSHTML,它会吐出一些丑陋的HTML。为了我的目的,我正在使用WYSIWYG和HTML编辑模式(使用ICSharp.TextEditor)和Buffer类进行多标签编辑,以便在标签更改时更新。作为Buffer类的一部分,我实际上run the HTML through HTML Tidy和一些scrub-n-replace位来获得有效的XHTML。

我只提供这个解决方案,因为我也没能找到一个不是以某种方式从MSHTML派生的解决方案,最终只是继续推进上述解决方案以继续前进。

答案 1 :(得分:2)

您可以从SpiceLogic尝试.NET Win HTML编辑器控件,

https://www.spicelogic.com/Products/NET-Win-HTML-Editor-Control-8

他们的组件可以嵌入所有本地映像并返回.NET MailMessage对象,这对于开发电子邮件客户端非常方便。

答案 2 :(得分:2)

我还需要一个WYSIWYG编辑器,用于我正在处理的Windows Forms项目。我写了关于我找到的项目here。最终,我最终使用了我在CodeProject上找到的东西:A Windows Forms based text editor with HTML output。这确实违反了上述(a),因为它使用了WebBrowser控件。但是,我找不到任何没有做到这一点的好事(如果你不以某种方式使用WebBrowser,那么你基本上必须使用你自己的HTML解析器和渲染器才能处理“你 - 你 - 请参阅“WYSIWYG的一部分”。这个控件的好处是源代码可以轻松定制,因此您可以根据需要随意添加格式化选项(如果您希望所有样式都在线,您也可以这样做)。

答案 3 :(得分:2)

HTML Edit Control for .NET(披露:我写过)。

它不依赖于任何网络浏览器;它是一个Windows窗体控件;并且,它可以处理style=属性。

这不是你想要的:因为它是为WYSIWYM设计的,工具栏没有用于编辑内联样式的按钮(虽然它的渲染引擎将渲染内联样式),工具栏允许你只指定块级元素,如{ {1}}和<p>以及<h1><ul>;但如果您愿意,可以向我询问有关添加功能的信息(如Developing New Functionality部分所述)。

答案 4 :(得分:1)

不要搜索HTML编辑器,而应考虑RichText编辑器的选项(可以更容易创建),然后将最终文本转换为HTML文档。

如果您需要使用一组最小的功能(粗体/斜体等),那么创建RT编辑器和将最终文档转换为HTML格式都不应该很难。

另一方面,如果您需要使用更多功能(例如表格),则需要学习Rich Text Format并实现所需的功能。

其他资源:

答案 5 :(得分:1)

我使用了a)和b)的组合

: - )

我在webeditor中使用了mshtml和tinymce的包装器......

http://peitor.blogspot.com/2007/12/great-windows-forms-html-control.html

包含截图。

我认为你应该试试这个控件。

答案 6 :(得分:0)

nikhil的源代码提供了一个不错的解决方案。我在某个时候下载了这个小组件,我认为它使用的是MSHTML。但我不确定。来源可以下载here。让我知道它是否有帮助:)

答案 7 :(得分:0)

Windows窗体中最简单的HTML编辑器可能会在<div contenteditable="true"></div>控件中显示WebBrowser。它内置了对常见html文本编辑功能的支持,例如:

  • Ctrl + B 使选择变为粗体
  • Ctrl + I 使其变为斜体
  • Ctrl + U 使选择带下划线
  • Ctrl + A 以选择所有文本
  • Ctrl + C 复制选择
  • Ctrl + X 剪切选择
  • Ctrl + V 粘贴所选内容
  • Ctrl + K 插入链接

但是,为了获得更好的用户体验,您可以依赖document中的DOM WebBrower对象并使用其execCommand方法并轻松运行诸如Bold,{{1} },ItalicUnderlineInsertOrderedListInsertUnorderedListInsertImageFormatBlockForeColor等。

例如,以下命令插入有序列表:

BackColor

示例-Windows窗体HTML编辑器

在这里,我将分享一个C#应用程序的示例,并轻松地向您展示可以实现HTML编辑器。

enter image description here

webBrowser1.Document.ExecCommand("InsertOrderedList", false, null);

要使用此HTML编辑器类,只需在public class HtmlEditor { WebBrowser webBrowser; private dynamic doc; private dynamic contentDiv; public HtmlEditor(WebBrowser webBrowserControl, string htmlContent) { webBrowser = webBrowserControl; webBrowser.DocumentText = @"<div contenteditable=""true""></div>"; webBrowser.DocumentCompleted += (s, e) => { doc = webBrowser.Document.DomDocument; contentDiv = doc.getElementsByTagName("div")[0]; contentDiv.innerHtml = htmlContent; }; } public string HtmlContent => contentDiv.InnerHtml; public void Bold() { doc.execCommand("bold", false, null); } public void Italic() { doc.execCommand("italic", false, null); } public void Underline() { doc.execCommand("underline", false, null); } public void OrderedList() { doc.execCommand("insertOrderedList", false, null); } public void UnorderedList() { doc.execCommand("insertUnOrderedList", false, null); } public void ForeColor(Color color) { doc.execCommand("foreColor", false, ColorTranslator.ToHtml(color)); } public void BackColor(Color color) { doc.execCommand("backColor", false, ColorTranslator.ToHtml(color)); } public void InsertImage(Image image) { var bytes = (byte[])new ImageConverter().ConvertTo(image, typeof(byte[])); var src = $"data:image/png;base64,{Convert.ToBase64String(bytes)}"; doc.execCommand("insertImage", false, src); } public void Heading(Headings heading) { doc.execCommand("formatBlock", false, $"<{heading}>"); } public enum Headings { H1, H2, H3, H4, H5, H6 } } 上使用WebBrowser控件并以这种方式初始化编辑器即可:

Form

然后,您可以使用HtmlEditor editor; private void Form1_Load(object sender, EventArgs e) { var html = @"Some html content"; editor = new HtmlEditor(webBrowser1, html); } 显示可用命令并运行命令。例如:

ToolStrip

答案 8 :(得分:0)

你没有提到你是否愿意支付控件,但如果你是我推荐Actipro SyntaxEditor

答案 9 :(得分:0)

这是我的第一个贡献。

您可以使用RichTextBox。 RTF格式足以创建电子邮件。

我最近写过关于如何加载和保存到RichTextBox的内容的硬盘。

允许复制和粘贴。它使用简单,只需几个按钮即可创建自己的命令。

With RichTextBox1 
    .SelStart = 0 
    .SelLength = Len (. Text) 
    .SelColor = vbRed
End With

加载和保存示例。

http://danielcatala.wordpress.com/2014/01/30/como-cargar-y-guardar-archivos-richtext-con-wpf/

Private Sub btnCarga(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click

    Dim archivoCarga As New StreamReader("prueba.rtf")
    With RichTextBox1
        .Selection.Select(.Document.ContentStart, RichTextBox1.Document.ContentEnd)
        .Selection.Load(archivoCarga.BaseStream, System.Windows.DataFormats.Rtf)
    End With
End Sub

Private Sub btnGuarda(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button2.Click

    Dim archivoSalida As New StreamWriter("prueba.rtf")
    Dim bs As Stream = archivoSalida.BaseStream

    With RichTextBox1
        .Selection.Select(RichTextBox1.Document.ContentStart,     RichTextBox1.Document.ContentEnd)
        .Selection.Save(bs, System.Windows.DataFormats.Rtf)
    End With
End Sub