父窗口快捷方式从无模式子窗口窃取输入



我有一个带有父窗口的应用程序,并且有可能从中拉出多个无模式窗口。

在其中一个无模式窗口中,有一个文本框。

在文本框中键入时,我希望能够按 CTRL+A 选择所有文本。

但是,我的父窗口有一个菜单项,该菜单项指定 CTRL+A 作为其快捷方式(它执行自己的选择所有操作)。

在我的无模式文本框/控件/窗体中的 KeyDown 事件中,我从未看到 CTRL+A 通过。 简而言之,它被父窗口窃取了。 我想覆盖它以在无模式窗口中执行不同操作。或者,我想覆盖它以什么都不做。如果可能,我该怎么做?

在这里找到答案:在 Windows 窗体应用程序中实现键盘快捷方式的最佳方法?

诀窍是重写 ProcessCmdKey 方法,并在我的情况下选取所需的输入 (Ctrl + A) 时返回 true。

选项 1(快速和脏):在 WinForm 或 WPF 中,创建用于键关闭的事件侦听器。在代码隐藏中

private void textBox1_keyDown(object sender, KeyEventArgs e)
{
    if (e.Control & e.KeyCode == Keys.A)
    {
        textBox1.SelectAll();
    }
}

选项 2:继承文本框并覆盖 OnPreviewKeyDown

最新更新