处理WebBrowser控件上的关键事件

时间:2009-03-16 06:31:40

标签: events browser webbrowser-control keydown

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

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

3 个答案:

答案 0 :(得分: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!
    }
}

答案 1 :(得分: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

答案 2 :(得分:1)

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

 foreach(string line in lines)
 {
     var row = new List<char>();
     ...

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