C# 同时按下两个按钮时

C# 同时按下两个按钮时,c#,C#,我有个小问题。我有一个表单,这是我的登录表单。然后我还有另一个表单,那就是我的adduser表单。当我点击登录表单的登录按钮时,它需要检查shift键和control键是否同时按下。如果未按下这两个按钮,则不应打开“添加用户”窗体。但是如果他们都被按下并且登录按钮被点击,它应该显示表单 我所拥有的: if (Control.ModifierKeys == (Keys.Control & Keys.Shift)) { //Show the form } 但这是行不通的 当我有:

我有个小问题。我有一个表单,这是我的登录表单。然后我还有另一个表单,那就是我的adduser表单。当我点击登录表单的登录按钮时,它需要检查shift键和control键是否同时按下。如果未按下这两个按钮,则不应打开“添加用户”窗体。但是如果他们都被按下并且登录按钮被点击,它应该显示表单

我所拥有的:

if (Control.ModifierKeys == (Keys.Control & Keys.Shift))
{
    //Show the form
}
但这是行不通的

当我有:

if (Control.ModifierKeys == Keys.Shift)
{
    //Show the form
}
然后它就起作用了


按下control和shift两个按钮如何实现这一点?

试试
Keys.control | Keys.shift


这是一个标志枚举;每个值由基础
int
中的一个单独位表示

Keys.Control&Keys.Shift
导致零值-例如,如果
Control
0001
Shift
0010
,则按位-
0000

Control.ModifierKeys
将是
0000
当且仅当用户未按下任何修改键时,因此
=
仅当用户未按下任何键时才会产生
true

另一方面,
Keys.Control | Keys.Shift
会产生一个表示“这两个标志”的值,例如,如果
Control
0001
Shift
0010
,则按位的
0011

Control.ModifierKeys
将是
0011
当且仅当用户同时按住Ctrl键和Shift键时,因此在这种情况下,
==
将只产生
true


或者,您可以将其分解为

bool ctrlIsHeldDown  = (Control.ModifierKeys & Keys.Control) == Keys.Control;
bool shiftIsHeldDown = (Control.ModifierKeys & Keys.Shift)   == Keys.Shift;
if (CtrlIsHeldDown && shiftIsHeldDown)
{
    ...
}
(value&x)=x
构造检查是否设置了单个标志
x
,然后检查其是否为jsut标准布尔逻辑。

您可以执行以下操作:

if (Control.ModifierKeys == (Keys.Control | Keys.Shift))
{
    //Show the form
}

希望这能有所帮助。

这是一个OR语句。然后,当我单独按下control键时,它会进入,当我单独按下shift键时,它也会进入。我希望它只在两个都关闭时执行。@Bebbie7它是在检查相等性之前计算的“按位or”。@Bebbie7我添加了一些详细信息;在这种情况下,OR基本上以相反的方式工作。