c# - NumLock isKeyLocked 不起作用

标签 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;
        }
    }

最佳答案

我不确定您从哪里调用此函数,但如果您使用某些控件的 KeyDown 事件,请尝试使用 KeyUp 事件。

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

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

关于c# - NumLock isKeyLocked 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507013/

相关文章:

c# - 算法挑战 : merging date range

c# - 如何正确打开登录表单

c# - 从父级调用 mdi 子方法

VB.NET 循环通过特定的 MDI 子项

c# - 服务需要检测工作站是否被锁定,屏幕保护程序是否处于事件状态

c# - 如何选择正确的代码页来解码CArchive编码的内容

c# - 四舍五入到最接近的整数

c# - WPF 控件的公共(public)类修饰符

c# - 在 WPF 应用程序中使用 FolderBrowserDialog