如何识别活动的子窗体并激发一个通用方法(存在于每个子窗体中)
本文关键字:窗体 一个 方法 于每个 存在 识别 何识别 活动 | 更新日期: 2023-09-27 18:29:55
我有一个主(MDI)表单和大约70个子表单,这些表单已初始化并显示在运行时。一次可能会显示一个以上的子窗体。在子窗体中有名为"OK"的按钮及其事件"btnOk_click(object sender,EventArgs e)"。父窗体中有一个名为"保存"的按钮,如果我们单击它运行时,activeMDI子窗体事件(btnOk_click)应该被激发。
请在这个问题上帮助我。
目前,我使用以下代码来解决这个问题
switch (ActiveMdiChild.GetType().Name)
{
case "frmSalesOrder":
case "frmPurchaseOrder":
case "frmSizeRatio":
break;
case "frmUserGroup":
var _frmUserGroup = (frmUserGroup)this.ActiveMdiChild;
_frmUserGroup.btnOK.PerformClick();
_frmUserGroup = null;
break;
case "frmUser":
var _frmUser = (frmUser)this.ActiveMdiChild;
_frmUser.btnOK.PerformClick();
_frmUser = null;
break;
谢谢Joseph J
接口可以在这里真正帮助您:
interface IChildSave {
void SaveAction();
}
然后在您的每个子窗体中,实现它:
public partial class Form1 : Form, IChildSave {
public void SaveAction() {
saveButton.PerformClick();
}
private void saveButton_Click(object sender, EventArgs e) {
// save routine
}
}
那么您的MDI父窗体将不再需要Switch语句:
if (this.ActiveMdiChild is IChildSave) {
((IChildSave)this.ActiveMdiChild).SaveAction();
} else {
MessageBox.Show("Child Form does not implement IChildSave.");
}
有很多方法可以做到这一点。你的是其中之一(但很难用60个表格来完成!)。。
无论如何,你可以让每个孩子订阅当你按下保存时它引发的事件。