C# 如何识别活动子窗体并激发一个通用方法(存在于每个子窗体中)?
我有一个主MDI表单和大约70个子表单,它们被初始化并显示 在运行时。一次可能会显示多个子表单。在每个 子窗体中有名为OK的按钮及其事件btnOk_clickobject sender、EventArgs e。 在父窗体中有一个名为Save的按钮,如果我们单击它,在 运行时应触发activeMDI子窗体事件btnOk_click 请在这个问题上帮助我 目前,我使用以下代码来解决这个问题C# 如何识别活动子窗体并激发一个通用方法(存在于每个子窗体中)?,c#,.net,winforms,mdi,C#,.net,Winforms,Mdi,我有一个主MDI表单和大约70个子表单,它们被初始化并显示 在运行时。一次可能会显示多个子表单。在每个 子窗体中有名为OK的按钮及其事件btnOk_clickobject sender、EventArgs e。 在父窗体中有一个名为Save的按钮,如果我们单击它,在 运行时应触发activeMDI子窗体事件btnOk_click 请在这个问题上帮助我 目前,我使用以下代码来解决这个问题 switch (ActiveMdiChild.GetType().Name) {
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有很多方法可以做到这一点。您的是其中之一,但很难使用60个表单
无论如何,您可以让每个孩子订阅当您按save时它引发的事件 有很多方法可以做到这一点。您的是其中之一,但很难使用60个表单
无论如何,您可以让每个孩子订阅当您按save时它引发的事件 在这里,界面确实可以帮助您:
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.");
}
在这里,接口确实可以帮助您:
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.");
}
目前我做的一个开关和代码如下;目前我做的一个开关和代码如下;