0

Web ブラウザー コントロールと、URL を入力するために使用する 2 つのボタンとテキスト ボックスを備えた非表示パネルを備えた非常にシンプルなアプリをセットアップしました。

アプリを起動すると、このような途方もなく単純なコードであっても、キーを押しても何の効果もありません。

  Private Sub Frm_Main_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    My.Settings.Reload()
    Dim URL As New Uri(Application.StartupPath & "\" & My.Settings.path)
    WebBrowser1.Url = URL
    TXT_URL.Text = My.Settings.path
    Me.KeyPreview = True
 End Sub



Private Sub Frm_Main_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    Beep()
End Sub

ただし、メニュー オプションをクリックしてパネルを表示し、すぐにパネルのボタンをクリックして pnl_url.visible=false を設定すると、キーを押してキーアップ ルーチンから応答を取得できます。

何か案は?ユーザーに何かをクリックさせずに、アプリにキーストロークの受け入れを開始させるにはどうすればよいかわかりません。me.focus または 'control'.focus も何もしていません。

Visual Studio 2010 で書かれました

** * ** * ** * ** * ** * ** * *編集* ** * ** * ** * ** * ** * ** * ** * ** * *** 私が持っていたそれを窒息させていたのはWebブラウザコントロールであることがわかりましたが、それを連携させる方法がわかりませんでした。私の友人が私のためにそれを修正しました。

        Private Sub WebBrowser1_PreviewKeyDown(sender As Object, e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles WebBrowser1.PreviewKeyDown
        Dim ee As New KeyEventArgs(e.KeyData)

        Me.Frm_Main_KeyUp(sender, ee)
    End Sub
4

1 に答える 1

1

アプリの起動時に Web ブラウザーにフォーカスがあるため、これは正しくありません。ブラウザは、キーストロークにも関心のある独自のランタイム環境を実装しています。たとえば、Javascript は主要なイベントにアクセスできます。パネルを操作することで、おそらく別のコントロールにフォーカスを与えることになり、KeyUp イベントが機能するようになりました。

Form.KeyPreview よりも大きな武器が必要になります。フォームの ProcessCmdKey() メソッドをオーバーライドすることもできます。ブラウザにフォーカスがある場合でも実行されます。ただし、このメソッドはショートカット キーを実装できるようにするためのものであることに注意してください。F1 を押してヘルプを表示するようなものです。コマンドキー、したがって名前。通常のキーボード処理には適していません。

そしてもちろん、ブラウザで実行されているスクリプトが何であれ、それでも壊れます。そのようなショートカットキーも見たいと思うかもしれません。

基本的な問題は、あなたのアプローチが壊れていることだと考えてください。

于 2013-06-01T21:57:27.890 に答える