在textbox.TextChanged事件中,我想阻止一些特定的(处理器密集型)功能执行,如果一个键仍然按下。例如。当用户通过按住删除键删除大区域的文本时,如果删除键仍然按下,我希望阻止代码触发。
我查看了Control.ModifierKeys
这是谷歌搜索最接近的事情,但在我的具体情况下,如果按下删除或退格键,我想要陷阱 - 哪个ModifierKeys不提供。
有谁知道怎么做?理想情况下,我不需要跟踪每个文本框的keyup / keydown状态(尽管如果没有其他方法我会这样做)
答案 0 :(得分:1)
为什么不处理KeyUp event而不是处理KeyPress
。这样你就可以确保钥匙已被压下,并且正在......错误...被释放(因为没有更好的词!)
答案 1 :(得分:0)
如果您想知道当前的键盘状态(通过KeyPreview),则无法在主窗体上附加事件。
然后检查文本框事件处理程序中的存储状态。
答案 2 :(得分:0)
覆盖Control.ProcessKeyPreview
应该这样做。
答案 3 :(得分:0)
最后,我采用了外部函数GetKeyboardState
因此,为了将来的参考,我正在做一些事情:
[DllImport("user32.dll")] public static extern int GetKeyboardState(byte[] lpKeyState);
private void myFunc()
{
byte[] keyboardState = new byte[255];
int keystate = GetKeyboardState(keyboardState);
if (keyboardState[(int)Keys.Back] == 128)
{
// backspace still pressed
return;
}
else if (keyboardState[(int)Keys.Delete] == 128)
{
// Delete key still pressed
return;
}
// More processor intensive code ...
}
我不确定函数调用开销,但我很确定它会少于函数执行的处理,如果不存在的话。