2009-03-16 14 views
7

WebBrowserコントロールをC#アプリケーションで使用していて、WebBrowserにフォーカスがある間に、個々のコンテンツ要素(入力フィールド、リンクなど)にフォーカスがあるかどうかにかかわらず、すべてのキーイベントを処理します。私は単にブラウザコントロールKeyDownイベントにイベントハンドラを追加しようとしましたが、これは機能しません。私は、フォーカス可能な各オブジェクトにハンドラを明示的にフックしたくはありません。HtmlElementWebBrowserコントロールのキーイベントの処理

の前にすべての重要なイベントを受信するには、がブラウザまたはそのコンテンツ要素に渡されますか。

答えて

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

'WebBrowserShortcutsEnabled'が' False'に設定されていても動作します – prostynick

2

あなたがコントロールのためのKeyPressイベントまたはKeyDownイベントのイベントがありませんので、あなたは運の外にある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 
0

ロードされたドキュメントのBody要素にキーハンドラを追加できます。デフォルトでは、これはbody要素の子要素で発生する同じイベントをキャッチします。

​​

ドキュメントが読み込まれた後にハンドラを追加する必要があると思います。 DocumentCompletedイベントハンドラに追加します。

関連する問題