c# - 当控件具有焦点时如何防止托管表单处理命令键

标签 c# winforms keyboard-shortcuts

我正在寻找一种方法来在控件获得焦点时取消键盘快捷键或命令键(如 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/

相关文章:

.net - 在 WinForms 中为上下文菜单动态选择菜单项的正确方法是什么?

c# - 用户界面建议 : Where to place MoveUp/Down buttons

c# - 实现快捷方式编辑器文本框的最佳方法是什么?

visual-studio - CodeRush XPress |代码 Intelliassist 快捷方式

c# - 在 con.Open() 之前测试数据库连接是否正常

c# - IsOrderedBy 扩展方法

c# - Visual Studio 2017 中的 Android 设备管理器显示 'Android SDK Platform is Missing'

c# - 是否可以抛出 MessageQueueException?

c# - 使用 WinForms 绘制宽线时出现 OutOfMemoryException

visual-studio-2010 - 如何向 Visual Studio 添加自定义命令?