修飾キーの押下を確認する方法 (Windows フォーム .NET)

ユーザーがアプリケーションにキーを入力すると、SHIFTALTCTRL などの修飾キーが押されたかどうかを監視することができます。 修飾キーが他のキーと組み合わせて押されても、マウス クリックによっても、アプリケーションが適切に応答できるようになります。 たとえば、S キーを押すと、画面に "s" が表示されることがあります。 そうではなく、CTRL + S キーが押される場合には、現在のドキュメントが保存されることがあります。

重要

.NET 7 と .NET 6 用のデスクトップ ガイド ドキュメントは作成中です。

KeyDown イベントを処理する場合、イベント ハンドラーが受信する KeyEventArgs.Modifiers プロパティによって、どの修飾キーが押されているかが特定されます。 また、ビットごとの OR と組み合わせた修飾キーと共に押された文字が、KeyEventArgs.KeyData プロパティによって特定されます。

KeyPress イベントまたはマウス イベントを処理している場合、イベント ハンドラーがこの情報を受信することはありません。 Control クラスの ModifierKeys プロパティを使用して、キー修飾子を検出します。 どちらの場合も、適切な Keys 値とテスト対象の値のビットごとの AND を実行する必要があります。 Keys 列挙型を使用すると、各修飾キーのバリエーションが増えるため、ビットごとの AND の確認には、正しい値を使用することが重要です。

たとえば、次のキー値は SHIFT キーを表します。

修飾キーとして SHIFT をテストする場合の正しい値は、Keys.Shift です。 同様に、修飾子として CTRLALT をテストする場合は、Keys.Control 値と Keys.Alt 値をそれぞれ使用する必要があります。

修飾キーを検出する

ModifierKeys プロパティと Keys 列挙値をビットごとの AND 演算子と比較して、修飾キーが押されているかどうかを検出します。

次のコード例では、KeyPress イベント ハンドラーと KeyDown のイベント ハンドラー内で、SHIFT キーが押されているかどうかを確認する方法を示します。

// 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

関連項目