定义适用于所有形式的 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。
我正在开发一个 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。