在MdiChild窗体的Ctrl+S上调用MdiParent方法
本文关键字:调用 MdiParent 方法 Ctrl+S MdiChild 窗体 | 更新日期: 2023-09-27 17:58:53
我有一个mdiParent表单,其中有一个保存方法。现在,我希望每当我在activeMdiChild窗体中按Ctrl+S时,都应该调用父Save方法。欢迎任何提示或建议。
提前Thanx。
如果MDI父窗体中有MenuStrip,那么除了使用Ctrl+S快捷键添加菜单外,无需执行任何其他操作。然后,如果用户甚至以子形式按下这些组合,则将执行父菜单的代码。
但是,如果您不想添加菜单,则可以覆盖"MDI父窗体"中的ProcessCmdKey
,并检查是否按下了Ctrl+S组合,然后执行所需操作:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.S))
{
MessageBox.Show("Handled in main form.");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
ProcessCmdKey
方法重写基ContainerControl.ProcessCmdKey
实现以提供对主菜单命令的额外处理键和MDI加速器。
处理activeMdiChild
中的KeyDown
事件。
private void activeMdiChild _KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.S && e.Modifiers == Keys.Control)
{
dynamic parent = this.Parent;
parent.Save();
}
}
EDIT:如注释中所述,mdiParent.Save
必须是公共
可能的解决方案之一:
1.创建接口ISave
{
void Save();
}
2.让您的父窗体继承接口
3.在您的子窗体中检查ctrl+s,如果是,请执行ISave saver = this.Parent as ISave;
if(saver != null)
saver.Save();
这就是