8

C# アプリケーションでコントロールを使用しており、個々のコンテンツ要素 (入力フィールド、リンクなど) がフォーカスされているかどうかに関係なく、コントロールがフォーカスされているWebBrowser間にすべてのキー イベントを処理したいと考えています。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 に答える