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

更新:2007 年 11 月

在创建接受用户击键的应用程序时,您可能还希望监视修改键,如 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 值。

yazd4ct6.alert_note(zh-cn,VS.90).gif说明:

Visual Basic 程序员还可以通过 Keyboard 属性访问键的信息。有关更多信息,请参见 My.Computer.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 窗体应用程序中的键盘输入