Events 在WebBrowser控件上处理关键事件

Events 在WebBrowser控件上处理关键事件,events,browser,webbrowser-control,keydown,Events,Browser,Webbrowser Control,Keydown,我在C#应用程序中使用WebBrowser控件,希望在WebBrowser具有焦点时处理所有关键事件,而不管哪个内容元素(输入字段、链接等)处于焦点。我试图简单地向浏览器控件KeyDownevent添加一个事件处理程序,但这不起作用。我不想显式地将处理程序挂接到每个可聚焦的HtmlElement 如何在将所有关键事件传递到浏览器或其内容元素之前接收它们?您只需将事件连接起来即可 private void wb_PreviewKeyDown(object sender, PreviewKeyDow

我在C#应用程序中使用
WebBrowser
控件,希望在
WebBrowser
具有焦点时处理所有关键事件,而不管哪个内容元素(输入字段、链接等)处于焦点。我试图简单地向浏览器控件
KeyDown
event添加一个事件处理程序,但这不起作用。我不想显式地将处理程序挂接到每个可聚焦的
HtmlElement

如何在将所有关键事件传递到浏览器或其内容元素之前接收它们?

您只需将事件连接起来即可

private void wb_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    // your code handling the keys here, like:
    if (e.Control && e.KeyCode == Keys.C)
    {
        // Do something funny!
    }
}

如果您想在WebBrowser控件中绕过Enter键之类的操作,那么您就运气不佳,因为该控件没有按键或向下键事件。KeyPreviewDownEventArgs不提供任何绕过按键的方法。唯一的方法是覆盖承载控件的窗体的ProcessCmdKey函数。例如:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean

    If keyData <> Keys.Enter Then Return MyBase.ProcessCmdKey(msg, keyData)
    Return True

End Function
Protected将函数ProcessCmdKey(ByRef msg作为消息,keyData作为键)重写为布尔值
如果keyData Keys.Enter,则返回MyBase.ProcessCmdKey(msg,keyData)
返回真值
端函数

您可以将密钥处理程序添加到加载文档的Body元素中。默认情况下,它捕获发生在body元素的任何子元素中的相同事件

webBrowser.Document.Body.KeyDown += MyKeyDownHandler;
...
private void MyKeyDownHandler(object sender, HtmlElementEventArgs e)
{
    // Set e.ReturnValue false if you want to cancel the key press
}

我认为必须在加载文档后添加处理程序,例如在DocumentCompleted事件处理程序中。

即使
WebBrowserShortcutsEnabled
设置为
False