我在C#应用程序中使用WebBrowser
控件,并希望在WebBrowser
具有焦点时处理所有关键事件,无论单个内容元素(输入字段,链接等)是什么聚焦。我试图简单地向浏览器控件KeyDown
事件添加一个事件处理程序,但这不起作用。我不想明确地将处理程序挂钩到每个可聚焦的HtmlElement
。
如何在将传递给浏览器或其内容元素之前接收所有关键事件?
答案 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事件处理程序中。