【问题标题】:Parent window shortcut steals input from modeless child父窗口快捷方式窃取无模式子的输入
【发布时间】:2015-04-29 22:10:25
【问题描述】:

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

在这些无模式窗口之一中,有一个文本框。

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

但是,我的父窗口有一个菜单项,将 CTRL+A 指定为其快捷方式(它自己做选择所有的事情)。

在我的无模式文本框/控件/表单的 KeyDown 事件中,我从来没有看到 CTRL+A 出现。简而言之,它正在被父窗口窃取。我想覆盖它以在无模式窗口中做一些不同的事情。或者,我想重写它以不做任何事情。如果可能,我该怎么做?

【问题讨论】:

  • 这是一个 WinForms 应用程序吗?
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 为什么不更改代码/功能以使表单弹出为模态.. 是否有理由不这样做.. 否则您可以创建一些委托事件处理程序.. 只是一个想法..
  • @JohnSaunders 是的,这是 WinForms。

标签: c# .net winforms modeless


【解决方案1】:

在这里找到答案: Best way to implement keyboard shortcuts in a Windows Forms application?

诀窍是覆盖 ProcessCmdKey 方法,并在我选择所需的输入 (Ctrl + A) 时返回 true。

【讨论】:

    【解决方案2】:

    选项 1(快速和肮脏): 在 WinForm 或 WPF 中,为 keydown 创建一个事件监听器。 在代码隐藏中

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多