写过 WebForm Html 编辑器的都知道,默认的回车是很讨厌的,一下子会占掉两行,因为它是用 <P></P> 段落标示的。有人是在初始化时加个 <div></div> 来杜绝这个问题,但是这个解决方案有个不好,就是当全选所有内容再清除以后,<div></div> 也会没有了,又回到两行的状况。因此也有解决方案是在回车时插入一个 <br> 并把光标定位到换行处。我们在 WebForm 中已经采用了后者,效果还不错。那么现在在 Winform 中如何来实现这个功能呢?刚开始简单地以为把 WebForm 的代码抄过来就可以了,可是实际发现当 designMode 开为 On 的时候,事件没有激发,所以只好另辟新法。因为 WebBrowser 和 WinForm 是可以交互的,所以最后的代码实现是这样的:
首先,为 KeyDown 事件添加 Event Handler :
HtmlDocument htmlDoc = webBrowser1.Document;
htmlDoc.Body.KeyDown += new HtmlElementEventHandler(Body_KeyDown);
然后在 KeyDown 事件中插入 <br> 并定位光标:
void Body_KeyDown(object sender, HtmlElementEventArgs e)
{
if (e.KeyPressedCode == 13 && !e.ShiftKeyPressed)
{
IHTMLDocument2 document = (IHTMLDocument2)webBrowser1.Document.DomDocument;
IHTMLTxtRange range = (IHTMLTxtRange)document.selection.createRange();
range.pasteHTML("<br>");
range.collapse(true);
range.select();
e.ReturnValue = false;
}
}
其实原理跟 WebForm 还是一样,只是把 script 变成了 WinForm 代码。