定义适用于所有形式的 win 表单应用程序的快捷方式

Define a shortcut that works in all forms of a win form application

我正在开发一个 MDI winforms 项目,我希望用户使用 F3 快捷方式在应用程序的每个位置打开搜索表单,所以我使用在我的 MDI 父表单中使用以下代码并将父表单的 KeyPreview 设置为 true:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
   if (keyData == (Keys.F3)) {
      //Show search form
      return true;
   }
   return base.ProcessCmdKey(ref msg, keyData);
}

该快捷方式适用于 MDI 父表单和子表单,但如果我使用 .ShowDialog()MDI 子表单之一打开表单,该快捷方式在最后一个表单中不起作用,换句话说,快捷方式适用于 childForm:

//in the parent form
var childForm = new Form1();
childForm.MdiParent = parentForm;
childForm.KeyPreview = true;
childForm.Show();

但不适用于 grandChildForm 形式:

//in the child form
var grandChildForm = new Form2();
grandChildForm.KeyPreview = true;
grandChildForm.ShowDialog();

如何解决问题,而不用在所有形式中重复ProcessCmdKey()方法?

创建 baseForm:

public partial class baseForm : Form
{
    public baseForm()
    {
        InitializeComponent();
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == (Keys.F3))
        {
            //Show search form
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

并让您的所有其他表单继承它:

public partial class Form1 : baseForm

然后你想要的任何常用功能都可以添加到 baseForm。