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



我正在处理一个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中。

最新更新