Windows 窗体中最简单的 HTML 编辑器可以<div contenteditable="true"></div>
在WebBrowser
控件中显示一个。它内置了对常见 html 文本编辑功能的支持,例如:
- Ctrl+B使选择加粗
- Ctrl+I使选择斜体
- Ctrl+U使选择加下划线
- Ctrl+A选择所有文本
- Ctrl+C复制选择
- Ctrl+X剪切选择
- Ctrl+V粘贴选择
- Ctrl+K插入链接
但是,为了获得更好的用户体验,您可以依赖 DOMdocument
对象WebBrower
并使用其execCommand
方法并轻松运行诸如Bold
, Italic
, Underline
, InsertOrderedList
, InsertUnorderedList
, InsertImage
, FormatBlock
, ForeColor
,BackColor
等命令。
例如以下命令插入有序列表:
webBrowser1.Document.ExecCommand("InsertOrderedList", false, null);
Example - Windows 窗体 HTML 编辑器
在这里,我将分享一个 C# 应用程序的示例,并向您展示如何轻松实现 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
要使用这个 HTML 编辑器类,在 a上有一个控件Form
并以这种方式初始化编辑器就足够了:
HtmlEditor editor;
private void Form1_Load(object sender, EventArgs e)
{
var html = @"Some html content";
editor = new HtmlEditor(webBrowser1, html);
}
然后您可以使用 aToolStrip
显示可用命令并运行这些命令。例如:
private void OrderedListButton_Click(object sender, EventArgs e)
{
editor.OrderedList();
}
private void ImageButton_Click(object sender, EventArgs e)
{
using (var ofd = new OpenFileDialog())
{
ofd.Filter = "Image files|*.png;*.jpg;*.gif;*.jpeg;*.bmp";
if (ofd.ShowDialog() == DialogResult.OK)
{
using (var image = Image.FromFile(ofd.FileName))
{
editor.InsertImage(image);
}
}
}
}