我已经在我的Windows窗体项目上工作了一段时间,我决定try 使用键盘快捷键.读了一会儿之后,我想我只需要编写一个事件处理程序并将其绑定到窗体的KeyDown事件:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.Alt && e.KeyCode == Keys.O)
    {
        MessageBox.Show("Ctrl+Alt+O: magic!");
    }
}

我这样做的好方法是打开Visual Studio设计器的"属性"面板,然后双击窗体的KeyDown事件以生成Form1_KeyDown事件处理程序.但是在测试我的应用程序时,表单完全不响应Ctrl+Alt+O键盘快捷键.不过,Visual Studio设计器确实生成了将事件处理程序绑定到窗体的代码:

private void InitializeComponent()
{
    // ...

    this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);

    // ...
}

因此,我try 向处理程序添加一个Console.WriteLine()调用,以判断它是否被调用,但也没有成功.

此外,我try 在事件绑定调用(如上图所示)上设置一个断点,发现程序刚好到达该断点.但是,我在方法定义本身中设置的任何断点都不会到达.

为了确保我正确地完成了前几个步骤,我试着用以下方法重复它们:

  • A new form in the same solution.
    Same issue: the form doesn't respond when I press my Ctrl+Alt+O keyboard shortcut and the debugger isn't even stepping into the event handler. Tried this again and it works.

  • A brand new WinForms solution.
    它工作得很好:出现消息对话框(Console.WriteLine()呼叫也可以工作).

所以我在这里完全迷路了.是什么阻止了这个项目中的所有窗体接收KeyDown事件?

推荐答案

您的窗体是否将KeyPreview属性设置为true?

Form.KeyPreview Property

获取或设置一个值,该值指示窗体是否将接收密钥

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx

.net相关问答推荐

带有ASP.NET核心的Angular 项目模板.API试验

为什么脚本不从 _Layout 加载并且必须添加到部分视图中?

Blazor服务器应用程序需要在页面上点击才能与元素交互

NuGet 兼容与计算框架(Xamarin 和 .NET 6)

如何手动注入依赖注入

.NET 4.5 项目未在 Visual Studio 2022 中编译

类似于字典但没有值的 C# 数据 struct

将 Moq 模拟对象传递给构造函数

比较 C# 中的双精度值

HttpClient 请求抛出 IOException

将 int 转换为 .NET 中的位数组

C# 中基于接口编程的运算符重载

数据库架构更改后更新 LINQ to SQL 类的最佳方法

如何更改 double.ToString() 中小数点的符号?

哪个更快:清除集合或实例化新的

互锁且易变

当我们按下 Enter 键时启动的 WPF 文本框命令

读取 XML(从字符串)并获取一些字段 - 读取 XML 时出现问题

在foreach循环中修改列表的最佳方法是什么?

Roslyn 编译代码失败