2014-12-04 95 views
0

我有几个子窗体,但他们有一个共同的方法,get_CurrentClamp()。我想从MDI父级调用当前活动mdichild的方法。我如何从mdi父c调用子窗体的方法#

这是一个菜单项中的MdiParent形式onclick事件MDIMain.cs应该调用该方法。

.... 
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中”可能 找到(是否缺少using指令或程序集引用?)

那是错误上午的MdiParent形式获得。

+1

什么是错误? – 2014-12-04 06:40:14

+0

你没有找到get_CurrentClamp? – 2014-12-04 06:42:15

+5

您正在转换为标准的Form类型,这当然没有名为get_CurrentClamp()的方法。您可以使用Reflection来获取方法并调用它。更好的解决方案是让所有的子表单都实现一个包含该方法的**接口**;那么你可以投到界面并调用方法... – 2014-12-04 07:05:11

回答

0

感谢Idle_Mind我通过使用接口解决了这个问题。 我在一个叫IChildMethods.cs及以下文件中创建一个新的界面接口

internal interface IChildMethods 
    { 
     void get_CurrentClamp(float curThreshhold=5.5); 
    } 

及子窗体,我只是包括在形式frmDashboard.cs像下面的界面;

public partial class frmDashboard : Form, IChildMethods 

,并在mdi窗体MDIMain.cs

.... 
private void mnugetCToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
    if (MdiChildren.Any()) 
      { 
       if (this.ActiveMdiChild is IChildMethods) 
      { 
       ((IChildMethods)this.ActiveMdiChild).get_CurrentClamp(varCurrentThreshhold); 
      }    

      } 
    } 
..... 

我还没有使用反射的方法,因为接口方法有效尝试,但我只是想知道,反思是不是使用的界面更好在这样的问题中

0

如果你确定活动形式将是实例之一,你可以声明F到是此类型:

frmDashboard f = this.ActiveMdiChild; 

你可能想以防万一这周围一个try/catch。 (在VB中工作,无论如何,不​​知道C#。)

相关问题