8

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

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

4

3 回答 3

9

您有PreviewKeyDown事件,只需将其连接起来。

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!
    }
}
于 2009-06-17T10:40:24.977 回答
2

如果你想做一些事情,比如绕过 WebBrowser 控件中的 Enter 键,那么你就不走运了,因为控件没有 KeyPress 或 KeyDown 事件。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
于 2012-07-20T14:31:36.047 回答
1

您可以将键处理程序添加到已加载文档的 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 事件处理程序中。

于 2016-10-04T10:00:06.660 回答