【发布时间】: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