11

VB.NETで同時に押されたキー「Control」と「t」を検出しようとしています。私がこれまでに持っているコードは次のとおりです。

Private Sub frmTimingP2P_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyValue = Keys.ControlKey And e.KeyValue = Keys.T Then
        MessageBox.Show("Ctrl + T")
    End If
End Sub

and ステートメントと 2 番目の keyvalue ステートメントを削除することで、いずれかのキーを検出できますが、これを試しても実際には何も得られません。別の方法はありますか?

ありがとう

4

6 に答える 6

12

まず第一に、それは論理演算子であるためAnd、コード内にある必要があります。VB ではビット演算子です。次に、プロパティを使用して修飾キーをテストできます。AndAlsoAndModifiers

If (e.KeyCode And Not Keys.Modifiers) = Keys.T AndAlso e.Modifiers = Keys.Control Then
    MessageBox.Show("Ctrl + T")
End If

条件のe.KeyCode And Not Keys.Modifiers最初の部分の は、修飾キーをマスクするために必要です。

If e.Modifiers = Keys.Ctrlのように書くこともできますIf e.Control

Ctrlまたは、組み合わせ+Tが押されたかどうかを直接尋ねることで、これら 2 つのクエリを照合できます。

If e.KeyCode = (Keys.T Or Keys.Ctrl) Then …

両方のスニペットで、ビット マスクを使用します。

于 2012-12-10T15:24:18.257 に答える
4

Private Sub frmMain_Zaporka_KeyDown(sender As Object, e As KeyEventArgs) MyBase.KeyDown を処理します

Select Case e.KeyData
    Case (Keys.Control + Keys.Shift + Keys.F12)
        MsgBox("Control + Shift + F12")
    Case (Keys.Escape)
        Me.Close()
End Select

' or

If e.KeyCode = Keys.F12 AndAlso e.Modifiers = (Keys.Control Or Keys.Shift) Then
    MsgBox("Control + Shift + F12")
ElseIf e.KeyCode = Keys.Escape Then
    Me.Close()
End If

' or

Select Case e.KeyCode
    Case (Keys.F12 And e.Control And e.Shift)
        MsgBox("Control + Shift + F12")
    Case (Keys.Escape)
        Me.Close()
End Select

サブ終了

于 2014-02-26T13:33:47.243 に答える
1

現在vb.netをインストールしていませんが、キーダウンまたはキープレスイベントでこれを試してください:

If e.KeyCode = Keys.T AndAlso e.Control = True Then
MsgBox("Ctrl + T")
End If
于 2012-12-10T15:24:34.190 に答える