NumLock isKeyLocked无效

时间:2013-12-10 22:49:52

标签: c# mdi windowsformsintegration

我正在使用以下代码检查是否按下了NumLock,CapsLock或Insert,如果状态为ON,则相应地更新标签的文本。但由于某种原因,我不能让NumLock正常工作。如果NumLock已设置,它会使用“Num”更新标签的文本,但如果NumLock已设置,则无法更新。代码中的每个其他检查都有效。非常感谢任何帮助。谢谢。

        private void num_ins_caps_keyDown(object sender, KeyEventArgs e)
    {
        if ((e.KeyCode & Keys.KeyCode) == Keys.CapsLock)
        {
            if (Control.IsKeyLocked(Keys.CapsLock))

                num_ins_caps1.capsLabel.Text = "Caps";
            else
                num_ins_caps1.capsLabel.Text = null;
        }

        if ((e.KeyCode & Keys.KeyCode) == Keys.NumLock)
        {
            if (Control.IsKeyLocked(Keys.NumLock))

                num_ins_caps1.numLabel.Text = "Num";
            else
                num_ins_caps1.numLabel.Text = null;
        }

        if ((e.KeyCode & Keys.KeyCode) == Keys.Insert)
        {
            if (Control.IsKeyLocked(Keys.Insert))

                num_ins_caps1.insLabel.Text = "Ins";
            else
                num_ins_caps1.insLabel.Text = null;
        }
    }

1 个答案:

答案 0 :(得分:2)

我不确定你在哪里调用它,但是如果你正在使用某个控件的KeyDown事件,请尝试KeyUp事件。

我测试了您的代码并遇到了同样的问题。我不知道为什么它不能与KeyDown一起使用,但是当我将它附加到KeyUp事件时,它按预期工作。

我假设来自 Numlock 的信号在KeyDown事件触发之前发送,但来自 Numlock 的信号“关闭” “在KeyDown事件触发后发送,因此代码执行并仍然认为它已启用。 msdn docs中没有任何内容可以解释这种行为。