为什么numlock说实际关闭时它是打开的?

时间:2013-12-07 05:31:39

标签: c# winforms

我正在尝试使用文本框来显示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;    
    }        

2 个答案:

答案 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