如何从mdi parent c#调用子表单的方法

时间:2014-12-04 05:58:29

标签: c# winforms mdi mdichild

我有几个子表单,但它们中有一个常用方法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表格。

2 个答案:

答案 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是否比在这样的问题中使用接口更好