如何:确定按下的是哪个修改键

创建接受用户击键的应用程序时,可能还需要监视修改键(如 SHIFT、ALT 和 Ctrl 键)。 当修改键与其他键一起按下,或者与鼠标单击一起按下时,应用程序可以适当地响应。 例如,如果按下字母 S,这可能会导致屏幕上显示“s”,但如果按下了 Ctrl+S 键,则可能会保存当前文档。 如果处理 KeyDown 事件,则事件处理程序接收到的 KeyEventArgsModifiers 属性将指定按下哪个修改键。 或者,KeyEventArgsKeyData 属性将指定字符与通过按位 OR 组合的所有修改键一起按下。 但是,如果要处理 KeyPress 事件或鼠标事件,则事件处理程序不会收到此信息。 在这种情况下,必须使用 Control 类的 ModifierKeys 属性。 无论哪种情况下,都必须对相应的 Keys 值和要测试的值执行按 AND 操作。 Keys 枚举提供每个修改键的变体,因此请务必使用正确的值执行按位 AND 操作。 例如,SHIFT 键由 ShiftShiftKeyRShiftKeyLShiftKey 表示,测试 SHIFT 作为修改键的正确值为 Shift。 同样,要测试 CTRL 和 ALT 作为修饰键,应分别使用 ControlAlt 值。

注意

Visual Basic 程序员还可以通过 Keyboard 属性访问关键信息

要确定按下了哪个修改键

  • ModifierKeys 属性和 Keys 枚举值使用按位 AND 运算符,以确定是否按下了特定的修改键。 下面的代码示例演示如何确定在 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
    

另请参阅