C#如何不在keydown事件中判断ctrl alt shift中的两个以上按键被按下

2025-02-23 11:38:14
推荐回答(3个)
回答1:

KeyEventArgs类的主属性(KeyUp和KeyDown事件的一个参数)
(1).Alt属性:用来获取一个值,该值提示是否曾按下了Alt键
(2).Control属性:用来获取一个值,该值提示是否曾按下了Crtl键
(3).Shift属性:用来获取一个值,该值提示是否曾按下了Shift键
(4).Handle属性:用来获取一个值,该值提示是否曾处理过此事件
(5).KeyCode属性:以Keys枚举值返回键盘键的键码,该属性不包含修改键信息,用于测试指定的键盘键
(6).KeyData属性:以Keys枚举值返回键盘键的键码,该属性包含修改键信息,用于判断按下键的所有信息(可返回组合键)
(7).KeyValue属性:以整数形式返回键码,而不是Keys枚举类型值。用于获得所按下键的数字表示
(8).Modifiers属性:以Keys枚举值返回所按下的修改键,仅判断修改键的信息

回答2:

1、(Control.ModifierKeys & Keys.Alt) == Keys.Alt && (Control.ModifierKeys & Keys.Control) == Keys.Control

2、Control.ModifierKeys == Keys.Alt && Control.ModifierKeys  == Keys.Control
3、(Control.ModifierKeys & Keys.Alt) !=0 && (Control.ModifierKeys & Keys.Control) != 0
试了一下,3种方法中只有2显然是不对,1、3能正确识别。请检查程序其它地方有没有问题?

 

在事件处理事件中加入以下几行测试一下:

void Panel1_MouseMove(object sender, MouseEventArgs e)
{
   MessageBox.Show(Control.ModifierKeys+"");
   if ((Control.ModifierKeys & Keys.Alt) == Keys.Alt && (Control.ModifierKeys & Keys.Control) == Keys.Control) MessageBox.Show("正确1");
   if (Control.ModifierKeys == Keys.Alt && Control.ModifierKeys  == Keys.Control) MessageBox.Show("正确12");
   if ((Control.ModifierKeys & Keys.Alt) !=0 && (Control.ModifierKeys & Keys.Control) != 0) MessageBox.Show("正确3");
}

回答3:

监控e参数。
看你在按过个键时,
e参数中的键位码。