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