我正在尝试使用文本框来显示NumLock键的当前状态。我第一次按下NumLock键时,文本框将显示正确的状态,但后续的按键显示它仍处于该状态。我的代码如下:
private void getNumlockState(object sender, EventArgs e)
{
if (numLock == true)
{
lblNumlock.Text = "Numlock On";
}
if (numLock == false)
{
lblNumlock.Text = "Numlock Off";
}
}
我使用case语句来确定按下了哪个键:
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;
}
答案 0 :(得分:1)
由于您实际上并未读取 Numlock 键的状态,而是尝试在代码中跟踪它,因此您需要切换代码中的值:
case Keys.NumLock:
e.Handled = true;
getNumlockState(sender, e);
numLock = !numLock; // Invert (reverse) current value
break;
答案 1 :(得分:1)
问题:您始终为每numLock
NumLock Key Press.
解决方案:对于每个NumLock
密钥event
,您应该检查上次NumLock
状态并执行inverse
。因为您正在显示密钥{{ 1}}或ON
状态。
试试这个:
OFF