【问题标题】:Define a shortcut that works in all forms of a win form application定义适用于所有形式的 win 表单应用程序的快捷方式
【发布时间】:2016-05-23 05:44:11
【问题描述】:

我正在开发一个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()方法?

【问题讨论】:

    标签: c# winforms keyboard-shortcuts showdialog


    【解决方案1】:

    创建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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多