2

タブコントロール付きのWindowsアプリケーションがあります。タブコントロールのタブの1つにWebブラウザコントロールがあります。現在私が直面している問題は、フォーカスがWebブラウザコントロール内にある場合、タブコントロールの通常のCtrl+Tab機能が機能しないことです。Ctrl+Tabで選択したタブを変更する必要があります。フォーカスが選択したタブのWebブラウザコントロール内にある場合でも、tabcontrol。これを実現するにはどうすればよいですか?

私はすでにProcessCmdKeyをオーバーライドしようとしましたが、フォーカスがwebbrowserコントロール内にある場合はヒットしません。

また、registerhotkeyメソッドを試しましたが、機能しますが、アプリケーション内でCtrl+ホットキーがロックされ、アプリケーションの実行中にシステムがアプリケーション外で+押しTabても応答しません。これは、registerhotkeyの予想される動作です。CtrlTab

4

1 に答える 1

0

必要なコードは次のとおりです。

    If WB.ContainsFocus Then
        MsgBox("We have focus, disappearing...")
        WB.Document.Body.RemoveFocus()
    End If

ここで問題となるのは、そのコードをいつ実行するかです。WebBrowser1_GotFocusイベントに入れる場合は、オンとオフを切り替える必要があります。ユーザーがWBコントロールを操作している場合はコードをオフにし、そうでない場合や、前述の問題が発生すると予想される場合は、コードをオンに戻します。

もちろん、ボディからフォーカスを外した後、特定のコントロール/タブ/パネルなどにフォーカスを確実に合わせるために、別の行を追加することもできます。また、ここにあなたを助けるかもしれない答えを持っている他の3つのSO質問があります、しかしこれらはおそらく質問があなたのものと同一ではないが十分に類似しているという事実のために私が提供した方向とは異なる方向にあなたを連れて行きます役に立つこと(優先順にリストされていない)。

WebBrowserコントロールがフォーカスを盗むのを防ぎますか?

Webブラウザがフォーカスを盗む

C#アプリケーションでのWebBrowserコントロールのフォーカス

更新:.Body.RemoveFocus()の代わりに、次のように追加したかっただけです。

WB.Document.Body.Parent.RemoveFocus()

.Documentオブジェクトにはインテリセンスに明示的な.RemoveFocusメソッドがなかったので、私はこれを好みます。VS2012RCで取得しました。これはおそらくHTMLタグ(.Documentオブジェクトではなく)を参照しています。タグはhtmlタグの唯一の親であるため、body意味があり、オブジェクトの下のインテリセンスで直接使用できる「HTML」オブジェクトはありません。他の方法で取得できるので、この方法の方が便利です。

乾杯、そして何かについてもっと情報が必要な場合は私に知らせてください。

于 2012-10-02T03:00:23.480 に答える