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