13

WindowsフォームアプリケーションでTabキーをキャプチャし、それが押されたときにカスタムアクションを実行しようとしています。

いくつかのlistViewとボタンを備えたフォームがあります。フォームのKeyPreviewプロパティをtrueに設定し、タブ以外のキーを押すと、KeyDownイベントハンドラーが呼び出されます。

しかし、それはTabキーには当てはまりません。WndProcでもWM_KEYDOWNメッセージを受信しません。

フォーム内の各コントロール(TabStopプロパティ)をfalseに設定する必要がありますか?それよりももっとエレガントな方法があるに違いありません。

ありがとう。

4

4 に答える 4

34

これは、上記の回答に示されているVBコードに類似したC#コードです...

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Tab)
        {
            //your code
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }

お役に立てれば...

于 2010-03-17T11:47:28.767 に答える
9

これはあなたを助けますか?

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
  Dim keyPressed As Keys = CType(msg.WParam.ToInt32(), Keys)

  Select Case keyPressed
    Case Keys.Right msgbox("Right Arrow Key Caught")
    Case Keys.Left msgbox("LeftArrow Key Caught")
    Case Keys.Up msgbox("Up Arrow Key Caught")
    Case Keys.Down msgbox("Down Arrow Key Caught")
    Case Else Return MyBase.ProcessCmdKey(msg, keyData)
  End Select
End Function 
于 2010-03-17T11:10:06.180 に答える
7

「PreviewKeyDown」イベントを使用できます

于 2012-05-22T11:28:13.013 に答える
-1
Private Sub form1_KeyDown(.... ) Handles Me.KeyDown
    If e.KeyCode = Keys.Enter Then
        SendKeys.Send("{tab}")
    End If
End Sub
于 2013-11-28T12:56:08.003 に答える