如何:确定所按下的修改键

在创建接受用户击键的应用程序时,您可能还希望监视修改键,如 Shift、Alt 和 Ctrl 键。 并希望在同时按下修改键和其他键,或者单击鼠标的同时按下修改键时,您的应用程序可以做出适当的响应。 例如,如果按下了字母 S,此操作可能只会在屏幕上显示“s”,但如果您同时按下了 Ctrl+S 键,则可能会保存当前文档。 如果处理 KeyDown 事件,则事件处理程序所接收的 KeyEventArgsModifiers 属性指定按下的修改键。 或者 KeyEventArgsKeyData 属性指定按下的字符以及任何通过位 OR 组合的修改键。 但是,如果处理 KeyPress 事件或鼠标事件,则事件处理程序不接收此信息。 在这种情况下,您必须使用 Control 类的 ModifierKeys 属性。 无论哪种情况,您都必须对相应的 Keys 值和正在测试的值执行按位 AND 运算。 Keys 枚举提供每个修改键所对应的不同变体,因此使用正确的修改键值执行按位 AND 运算十分重要。 例如,ShiftShiftKeyRShiftKeyLShiftKey 都表示 Shift 键,而测试修改键 Shift 的正确值是 Shift。 同样,若要测试修改键 Ctrl 和 Alt,应分别使用 ControlAlt 值。

提示

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

确定所按下的修改键

  • 将位 AND 运算符与 ModifierKeys 属性和 Keys 枚举的值一起使用,以确定是否按下了某个特定修改键。 下面的代码示例显示在 KeyPress 事件处理程序中如何确定是否按下了 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
    
            public void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
                {
                    MessageBox.Show("Pressed " + Keys.Shift);
                }
            }
    
    private:
        void textBox1_KeyPress(Object^ sender, KeyPressEventArgs^ e)
        {
            if ((Control::ModifierKeys & Keys::Shift) == Keys::Shift)
            {
                MessageBox::Show("Pressed " + Keys::Shift.ToString());
            }
        }
    

请参见

任务

如何:在 Visual Basic 中确定 CapsLock 是否打开

参考

Keys

ModifierKeys

其他资源

Windows 窗体应用程序中的键盘输入