如何检查按下的修改键(Windows 窗体 .NET)
当用户在应用程序中键入键时,可监视按下的修改键,如 SHIFT、ALT 和 CTRL。 当修改键与其他键甚至是鼠标单击一起按下时,应用程序可以相应地做出响应。 例如,按 S 键可能会在屏幕上显示一个“s”。 如果按下键 CTRL+S,可能会保存当前文档。
如果处理 KeyDown 事件,事件处理程序收到的 KeyEventArgs.Modifiers 属性将指定按下的修改键。 此外,KeyEventArgs.KeyData 属性指定与按位 OR 组合的所有修改键一起按下的字符。
如果要处理 KeyPress 事件或鼠标事件,事件处理程序不会收到此信息。 使用 Control 类的 ModifierKeys 属性来检测修改键。 在任一情况下,都必须对相应的 Keys 值和要测试的值执行按位 AND。 Keys 枚举提供每个修改键的变体,因此,请务必使用正确的值执行按位 AND 检查。
例如,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