我有几个子表单,但它们中有一个常用方法get_CurrentClamp()
。我想从MDI父级调用当前活动mdichild的方法。
这是应该调用该方法的MDIparent格式 MDIMain.cs 中的menuitem的onclick事件。
....
private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MdiChildren.Any())
{
Form f = this.ActiveMdiChild;
f.get_CurrentClamp(varCurrentThreshhold);
}
}
.....
在子表单 frmDashboard.cs
public void get_CurrentClamp(float curThreshhold=5.5)
{
...
}
但是我一直都会收到错误,哪里出错了?任何帮助将不胜感激!
得到的错误是
错误3' System.Windows.Forms.Form'不包含的定义 ' get_CurrentClamp'没有扩展方法' get_CurrentClamp' 接受类型为'System.Windows.Forms.Form'的第一个参数。可以 找到(你错过了使用指令或汇编引用吗?)
这是错误的mdiparent表格。
答案 0 :(得分:0)
如果您确定活动表单将是frmDashboard
个实例之一,则可以将f声明为该类型:
frmDashboard f = this.ActiveMdiChild;
你可能想要一个try / catch来防万一。 (无论如何,在VB中工作。不确定C#。)
答案 1 :(得分:0)
感谢Idle_Mind我通过使用接口解决了这个问题。 我在名为 IChildMethods.cs 的文件中创建了一个新界面,下面是界面
internal interface IChildMethods
{
void get_CurrentClamp(float curThreshhold=5.5);
}
在子表单上,我只是在表单中包含了如下界面 frmDashboard.cs ;
public partial class frmDashboard : Form, IChildMethods
并在 mdiform MDIMain.cs
....
private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e)
{
if (MdiChildren.Any())
{
if (this.ActiveMdiChild is IChildMethods)
{
((IChildMethods)this.ActiveMdiChild).get_CurrentClamp(varCurrentThreshhold);
}
}
}
.....
我没有尝试使用Reflection方法,因为Interface方法有效,但我只是想知道Reflection是否比在这样的问题中使用接口更好