C# 为什么numlock在实际关闭时说它已打开?
我正在尝试获取一个文本框来显示NumLock键的当前状态。第一次按下NumLock键时,文本框将显示正确的状态,但随后的按下显示它仍处于该状态。我的代码如下:C# 为什么numlock在实际关闭时说它已打开?,c#,winforms,C#,Winforms,我正在尝试获取一个文本框来显示NumLock键的当前状态。第一次按下NumLock键时,文本框将显示正确的状态,但随后的按下显示它仍处于该状态。我的代码如下: private void getNumlockState(object sender, EventArgs e) { if (numLock == true) { lblNumlock.Text = "Numlock On"; } if (nu
private void getNumlockState(object sender, EventArgs e)
{
if (numLock == true)
{
lblNumlock.Text = "Numlock On";
}
if (numLock == false)
{
lblNumlock.Text = "Numlock Off";
}
}
我使用案例陈述来确定按下了哪个键:
switch (e.KeyCode)
{
case Keys.NumLock:
e.Handled = true;
getNumlockState(sender, e);
break;
case Keys.NumPad0:
e.Handled = true;
btnZero.PerformClick();
break;
case Keys.NumPad1:
e.Handled = true;
btnOne.PerformClick();
break;
// I have removed the case statements for most of the keys
}
}
表单加载事件处理程序:
private void frmMain_Load(object sender, EventArgs e)
{
this.KeyPreview = true;
}
由于您实际上并没有读取Numlock键的状态,而是试图在代码中跟踪它,因此您需要实际切换代码中的值:
case Keys.NumLock:
e.Handled = true;
getNumlockState(sender, e);
numLock = !numLock; // Invert (reverse) current value
break;
问题:每次按下
numLock键时,您总是启用numLock
。
解决方案:对于每个NumLock
按键事件
您应该检查最后一个NumLock
状态,并执行反向操作
。当您显示按键打开
或关闭
状态时
试试这个:
switch (e.KeyCode)
{
case Keys.NumLock:
if(numLock)
numLock=false;
else
numLock=true;
e.Handled = true;
getNumlockState(sender, e);
break;
case Keys.NumPad0:
e.Handled = true;
btnZero.PerformClick();
break;
case Keys.NumPad1:
e.Handled = true;
btnOne.PerformClick();
break;
// I have removed the case statements for most of the keys
}
你在听什么节目?
numLock!=numLock实际上是一个布尔表达式,它应该是numLock=!numLock
?但我刚刚在VS 2008中试用过,出现了一个错误,它是c#的下一个版本中的新功能吗?@KingKing:Yep。旧的C/C++语法。谢谢你的帮助。