如何知道箭头键是否被按下而未被释放?

时间:2010-12-17 11:14:31

标签: .net winforms event-handling

我如何知道箭头键是否被按下而未被释放? OnKeyDown事件会不断发送......

编辑:即使用户按住按钮几分钟,我们也只想收到一条通知。

感谢。

3 个答案:

答案 0 :(得分:1)

释放密钥时会触发OnKeyUp事件。 OnKeyDown持续射击,因为当按下键时键会重复。

答案 1 :(得分:1)

您可以创建可为空的DateTime,并在第一个按键事件上设置当前时间,并在按键事件上将其设置为null。如果时间跨度超过选定值(例如一秒),则用户按下该键。

答案 2 :(得分:1)

我认为这是一个Winforms问题,在使用Keyboard类的WPF中不是问题。跟踪KeyDown和KeyUp事件是不可靠的,当您的应用程序在按键关闭时获得或失去焦点时,您可能会错过通知。你需要一些pinvoke帮助:

    public static class NativeMethods {
        public static bool IsKeyDown(Keys key) {
            return GetKeyState(key) < 0;
        }

        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern short GetKeyState(Keys key);
    }