我正在寻找一种方法来在控件获得焦点时取消键盘快捷键或命令键(如 F1 或 CTRL+O)的击键。如果可能,在控制层面上。
假设我有一个控件(例如一个简单的文本框)托管在一个表单上。我为打开 (CTRL+O) 或帮助 (F1) 等命令设置了键盘快捷键。如果控件具有键盘焦点并且我按下了我想要阻止执行快捷命令的命令之一。
我更喜欢一种解决方案,我可以处理这些击键并防止它们在控件级别而不是在表单级别“冒泡”。
最佳答案
我找到的唯一解决方案是在控件级别实现/覆盖 ProcessCmdKey 函数:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData >= Keys.F1 && keyData <= Keys.F24)
{
WndProc(ref msg);
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
我还需要从我的主窗体中删除所有键盘快捷键并实现相同的方式来处理它们。
关于c# - 当控件具有焦点时如何防止托管表单处理命令键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9887076/