C# 如何从mdi父级c调用子窗体的方法
我有几个子表单,但它们有一个常用的方法,get\u CurrentClamp。我想从MDI父级调用当前活动MDI子级的方法 这是MDIMain.cs父窗体中menuitem的onclick事件,该窗体应调用该方法C# 如何从mdi父级c调用子窗体的方法,c#,winforms,mdi,mdichild,C#,Winforms,Mdi,Mdichild,我有几个子表单,但它们有一个常用的方法,get\u CurrentClamp。我想从MDI父级调用当前活动MDI子级的方法 这是MDIMain.cs父窗体中menuitem的onclick事件,该窗体应调用该方法 .... private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e) { if (MdiChildren.Any()) { For
....
private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MdiChildren.Any())
{
Form f = this.ActiveMdiChild;
f.get_CurrentClamp(varCurrentThreshhold);
}
}
.....
在子窗体frmDashboard.cs中
但我总是出错,哪里出了问题?任何帮助都将不胜感激
错误是这样的
错误3“System.Windows.Forms.Form”不包含的定义
“get\u CurrentClamp”和无扩展方法“get\u CurrentClamp”
接受类型为“System.Windows.Forms.Form”的第一个参数可能会
是否缺少using指令或程序集引用
这就是我在mdiparent窗体上遇到的错误。如果您确定活动窗体将是frmDashboard实例之一,则可以将f声明为该类型:
frmDashboard f = this.ActiveMdiChild;
为了以防万一,你可能需要尝试一下。无论如何,它在VB中工作。关于C不太清楚。多亏了我使用接口解决了这个问题。
我在一个名为IChildMethods.cs的文件中创建了一个新接口,下面是接口
internal interface IChildMethods
{
void get_CurrentClamp(float curThreshhold=5.5);
}
在子表单中,我只是在表单frmDashboard.cs中包含了如下界面
和在mdiform MDIMain.cs上
自从接口方法起作用以来,我还没有尝试过使用反射方法,但我只是想知道,在这样的问题中,反射是否比使用接口更好您是否找到了get\u CurrentClamp not found?您正在强制转换为标准表单类型,当然没有名为get\u CurrentClamp的方法。您可以使用反射来获取方法并调用它。更好的解决方案是让所有子窗体实现一个包含该方法的接口;然后你可以转换到接口并调用方法…@MarkHall,我已经将错误消息添加到问题中。你的错误消息确认了所有人都知道的。见我的评论。你要用反射还是界面来解决?如果您在实施过程中遇到困难,请使用详细信息进行编辑。。。
internal interface IChildMethods
{
void get_CurrentClamp(float curThreshhold=5.5);
}
public partial class frmDashboard : Form, IChildMethods
....
private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MdiChildren.Any())
{
if (this.ActiveMdiChild is IChildMethods)
{
((IChildMethods)this.ActiveMdiChild).get_CurrentClamp(varCurrentThreshhold);
}
}
}
.....