C#下的Webbrowser的KeyDown事件

最近在用Webbrowser开发一个富文本编辑器,一路磕磕碰碰,仅记录一下心得。

WebBrowser控件在编辑状态下,按下回车键后执行的是分段操作,相隔较大,Shift+回车是换行,两种行间距不一样。为了解决这个问题,倒是折腾了好几天。

在网上各种查找之后,几乎都是说用DIV标签来解决该问题,也就是编辑器初始时就直接把DIV嵌进去

<body>

<div> </div>

</body>

这样的话确实可以解决了该问题,回车之后就是新的DIV而不是换段落了,不过该方式有个问题,Ctrl+A全选后,再删除就会连带内部的DIV标签给删掉了,再回车又是一个P了。


接着继续研究,看到大牛提出来的,实现IDocHostUIHandler接口,按DOCHOSTUIFLAG_DIV_BLOCKDEFAULT 的路子实现 GetHostInfo方法。实现 IDocHostUIHandler接口吧,查了半天,确实麻烦,先要生成MsHtmHstInterop.dll,用到的 IDocHostUIHandler接口和ICustomDoc接口都是这个dll里边的,然后 把IDocHostUIHandler接口的个人实现挂接到 MSHTML 上。

最郁闷的是,以上大牛都是用axWebbrowser来实现的,几经折腾,终于通过以下方式实现了IDocHostUIHandler 接口:

// 把IDocHostUIHandler接口的个人实现挂接到 MSHTML 上
ICustomDoc cDoc = (ICustomDoc)this.webBrowser.Document.DomDocument;
cDoc.SetUIHandler((IDocHostUIHandler)this.webBrowser);

// IDocHostUIHandler 接口的实现,实现GetHostInfo
public void GetHostInfo(ref _DOCHOSTUIINFO pInfo)
{
    // DOCHOSTUIFLAG_DIV_BLOCKDEFAULT
    pInfo.dwFlags |= 0x00000100;
}

然而更杯具的事情发生了,编辑功能废了,也就是编辑模式下,任何按键都没反应,任何字符都敲不进去了.......

无奈之下,上坛子发帖去了,但一直没有得到回应,至今不知道我哪个地方错了,可能是我的接口实现有问题。

 

又回到之前思路,集中火力解决Ctrl+A 全选后删除的问题。又碰到问题了,Webbrowser没有KeyDown,KeyPress相关的事件。

顿时觉得叫天不应叫地不灵...虽然偶是无神论者....

又接着憋屈,终于在内伤喷血之前.. 峰回路转,我找到了KeyDown事件!

Webbrowser本身是没有相关事件,但是HtmlElement有,而且webBrowser.Document.Body就是 HtmlElement!

webBrowser.Document .Body.KeyDown += new HtmlElementEventHandler(Body_KeyDown);

 

虽然该问题还没有解决,但是算是多少有点进展了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值