当同时按下两个按钮时

本文关键字:两个 按钮 | 更新日期: 2023-09-27 17:54:05

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

What I have:

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

但是这行不通。

当我有:

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

我怎么能实现这两个按钮按下,控制和shift?

当同时按下两个按钮时

试试Keys.Control | Keys.Shift .


这是一个标志枚举;每个值在底层int中由一个单独的位表示。

Keys.Control & Keys.Shift的结果为零值,例如,如果Control0001, Shift0010,则按位- &0000

当且仅当用户按住no修饰键时,

Control.ModifierKeys将产生0000,因此==只会在用户不按住任何东西时产生true

另一方面,

Keys.Control | Keys.Shift的结果值表示"这两个标志"-例如,如果Control0001, Shift0010,则按位计算- |0011

当且仅当用户同时按住CtrlShift时,

Control.ModifierKeys将会是0011,所以在这种情况下,==只会产生true


或者,您可以将其分解为

bool ctrlIsHeldDown  = (Control.ModifierKeys & Keys.Control) == Keys.Control;
bool shiftIsHeldDown = (Control.ModifierKeys & Keys.Shift)   == Keys.Shift;
if (CtrlIsHeldDown && shiftIsHeldDown)
{
    ...
}

(value & x) == x构造检查是否设置了单独的标志x,之后它只是标准的布尔逻辑。

你可以这样做:

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