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