当同时按下两个按钮时
本文关键字:两个 按钮 | 更新日期: 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
的结果为零值,例如,如果Control
为0001
, Shift
为0010
,则按位- &
为0000
。
Control.ModifierKeys
将产生0000
,因此==
只会在用户不按住任何东西时产生true
。
Keys.Control | Keys.Shift
的结果值表示"这两个标志"-例如,如果Control
是0001
, Shift
是0010
,则按位计算- |
是0011
。
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
}