C# 为什么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

我正在尝试获取一个文本框来显示NumLock键的当前状态。第一次按下NumLock键时,文本框将显示正确的状态,但随后的按下显示它仍处于该状态。我的代码如下:

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++语法。谢谢你的帮助。