使用大小写的键修饰符不起作用
本文关键字:不起作用 大小写 | 更新日期: 2023-09-27 18:03:10
我已经定义,当一个键按下时,使用大小写来区分不同的键,一个动作发生
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.B:
//something happens here
break;
}
}
当我尝试添加一个键修饰符时,例如"Ctrl",我是这样做的
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.B && e.Modifiers == Keys.Control:
//something happens here
break;
}
}
编辑:当我尝试这样做时,它显示'&&' Cannot be applied to operands of type 'Windows.System.Forms.Keys' and 'bool'
。
如何正确地完成?
不能将if
语句作为case标签的一部分。Case直接将标签中的常量值与开关中的变量进行比较;&&
算子的结果是bool
,不能与KeyEventArg
相比较。您需要单独添加它或使用if
语句。
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.B:
if (e.Modifiers == Keys.Control)
//something happens here
//else
break;
}
}
我做错了吗?
当然,你是!case
标签不是条件,它们是与switch
中的表达式进行比较的值。
您可以在需要检查其他条件的每个case
中添加一个额外的if
,或者使用if
- then
- else
链:
private void Form1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.B && e.Modifiers == Keys.Control) {
//something happens here
} else if (...) {
} else {
}
}
根据其他答案,您仍然可以通过创建Tuple并根据哈希代码检查case语句来使用case语句,因为Tuple是引用类型,例如
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
int hash = new Tuple<Keys, Keys>(e.KeyCode, e.Modifiers).GetHashCode();
switch (hash)
{
case new Tuple<Keys, Keys>(Keys.B, Keys.Control).GetHashCode():
//something happens here
break;
}
}