WinForm 邮件编辑器回车的处理(转)

    写过 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 代码。

posted on 2009-05-20 10:58  Ryan.L.R  阅读(202)  评论(0)    收藏  举报

导航