共用方式為


如何檢查輔助按鍵按下 (Windows Forms .NET)

當使用者在應用程式中輸入按鍵時,您可以監視已按下的輔助按鍵,例如 SHIFTALTCTRL。 當您按下輔助按鍵搭配其他按鍵或甚至滑鼠點擊時,您的應用程式可以適當地回應。 例如,按下 S 鍵可能會導致畫面上出現 “s”。 如果按下 CTRL+S 按鍵,反而可能儲存目前的文件。

如果您處理 KeyDown 事件,事件處理常式所接收的 KeyEventArgs.Modifiers 屬性會指定按下哪些輔助按鍵。 此外,KeyEventArgs.KeyData 屬性會指定與位元 OR 結合的任何輔助按鍵一起按下的字元。

如果您要處理 KeyPress 事件或滑鼠事件,則事件處理常式就不會收到此資訊。 使用 Control 類別的 ModifierKeys 屬性來偵測輔助按鍵。 不論是哪一種情況,您都必須執行適當 Keys 值的位元 AND,以及您要測試的值。 Keys 列舉提供每個輔助按鍵的變化,因此務必以正確的值進行位元 AND 檢查。

例如,SHIFT 鍵是由下列索引鍵值表示:

用以測試 SHIFT 作為輔助按鍵的正確值是 Keys.Shift。 同樣地,若要測試CTRLALT 作為輔助按鍵,您應該分別使用 Keys.ControlKeys.Alt 值。

偵測輔助按鍵

比較 ModifierKeys 屬性與具有位元 AND 運算子的 Keys 列舉值,藉此偵測是否按下輔助按鍵。

下列程式碼範例示範如何判斷 SHIFT 鍵是否在 KeyPressKeyDown 事件處理常式內按下。

// Event only raised when non-modifier key is pressed
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyPress " + Keys.Shift);
}

// Event raised as soon as shift is pressed
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyDown " + Keys.Shift);
}
' Event only raised when non-modifier key is pressed
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

' Event raised as soon as shift is pressed
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

另請參閱