在MdiChild窗体的Ctrl+S上调用MdiParent方法

本文关键字:调用 MdiParent 方法 Ctrl+S MdiChild 窗体 | 更新日期: 2023-09-27 17:58:53

我有一个mdiParent表单,其中有一个保存方法。现在,我希望每当我在activeMdiChild窗体中按Ctrl+S时,都应该调用父Save方法。欢迎任何提示或建议。

提前Thanx。

在MdiChild窗体的Ctrl+S上调用MdiParent方法

如果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();
这就是