如何检查是否按下修饰键(Windows 窗体的.NET)
当用户在应用程序中键入键时,可以监视按下的修饰键,例如 SHIFT、ALT和 CTRL。 当修饰键与其他键或鼠标单击结合使用时,应用程序可以相应地做出响应。 例如,按 S 键可能会导致屏幕上显示“s”。 如果按下 Ctrl+S 键,当前文档可能会被保存。
如果您处理 KeyDown 事件,那么事件处理程序收到的 KeyEventArgs.Modifiers 属性将指定被按下的修饰键。 此外,KeyEventArgs.KeyData 属性指定与按位 OR 组合的任何修饰键一起按下的字符。
如果要处理 KeyPress 事件或鼠标事件,事件处理程序不会收到此信息。 使用 Control 类的 ModifierKeys 属性检测键修饰符。 在任一情况下,都必须对适当的 Keys 值和要测试的值执行按位 AND。 Keys 枚举提供了每个修饰键的变体,因此请务必按位和检查正确的值。
例如,SHIFT 键由以下键值表示:
为了作为修饰键测试 SHIFT 键 的正确值是 Keys.Shift。 同样,若要测试 CTRL 和 ALT 作为修饰符时,应分别使用 Keys.Control 和 Keys.Alt 值。
检测修饰键
通过将 ModifierKeys 属性和 Keys 枚举值与按位 AND 运算符进行比较,检测是否按下了修饰键。
下面的代码示例演示如何确定 KeyPress 和 KeyDown 事件处理程序中是否按下了 SHIFT 键。
// Event only raised when non-modifier key is pressed
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
MessageBox.Show("KeyPress " + Keys.Shift);
}
// Event raised as soon as shift is pressed
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
MessageBox.Show("KeyDown " + Keys.Shift);
}
' Event only raised when non-modifier key is pressed
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
End If
End Sub
' Event raised as soon as shift is pressed
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs)
If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
End If
End Sub