我已经定义,当一个键关闭时,使用案例区分各种键,就会发生一个动作
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'
。
如何正确完成?
答案 0 :(得分:3)
您不能将if
语句作为案例标签的一部分。 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;
}
}
答案 1 :(得分:1)
我做错了吗?
当然,你是! case
标签不是条件,它们是与switch
内的表达式相比较的值。
您可以在需要检查其他条件的每个if
内添加一个case
,或使用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 {
}
}
答案 2 :(得分:0)
从其他答案开始,你仍然可以使用case语句,通过制作一个Tuple并根据哈希码检查案例,因为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;
}
}