方法: どの修飾子キーが押されたかを判断する

ユーザーのキー入力を受け取るアプリケーションを作成するとき、SHIFT、ALT、CTRL キーなどの修飾キーを監視する機能を付けると便利な場合がありまする 修飾キーが他のキーとの組み合わせで押されたとき、マウス クリックで押されたとき、アプリケーションが適切に応答できます。 たとえば、文字 S を押すと画面上に "s" と表示されるだけで、CTRL + S を押すと現在の文書が保存されるという設定にすることができます。 KeyDown イベントを処理する場合、イベント ハンドラーが受信する KeyEventArgsModifiers プロパティによって、どの修飾キーが押されているかが特定されます。 あるいは、ビットごとの OR と組み合わせた修飾キーと共に押された文字が、KeyEventArgsKeyData プロパティによって特定されます。 ただし、KeyPress イベントまたはマウス イベントを処理している場合、イベント ハンドラーがこの情報を受け取ることはありません。 この場合は、ModifierKeys クラスの Control プロパティを使用する必要があります。 どちらの場合も、適切な Keys 値とテスト対象の値のビットごとの AND を実行する必要があります。 Keys 列挙型を使用すると、各修飾キーのバリエーションが増えるため、ビットごとの AND には、正しい値を使用することが重要です。 たとえば、SHIFT キーは ShiftShiftKeyRShiftKeyLShiftKey で表されます。修飾キーとして SHIFT をテストする正しい値は Shift です。 同様に、修飾子として CTRL と ALT をテストする場合は、Control 値と Alt 値をそれぞれ使用する必要があります。

注意

Visual Basic プログラマは、Keyboard プロパティを使用してキー情報にアクセスすることもできます。

どの修飾キーが押されたかを判断するには

  • ビットごとの AND 演算子、ModifierKeys プロパティ、Keys 列挙型の値を使用し、特定の修飾キーが押されたかどうかを判断します。 次のコード例では、KeyPress イベント ハンドラー内で SHIFT キーが押されているかどうかを確認する方法を示します。

    private:
        void textBox1_KeyPress(Object^ sender, KeyPressEventArgs^ e)
        {
            if ((Control::ModifierKeys & Keys::Shift) == Keys::Shift)
            {
                MessageBox::Show("Pressed " + Keys::Shift.ToString());
            }
        }
    
    public void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        {
            MessageBox.Show("Pressed " + Keys.Shift);
        }
    }
    
    Public Sub TextBox1_KeyPress(ByVal sender As Object, _
        ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
        If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
            MsgBox("Pressed " + Keys.Shift.ToString())
        End If
    End Sub
    

関連項目