日期:2014-05-20  浏览次数:20733 次

(WinForm)怎样调用当前活动子窗体中的过程
环境:VS.NET   2005
每个子窗体中都有一Public过程SaveData,在MDI窗体中按下某一按钮后通过ActiveMdiChild来调用子窗体中的SaveData过程

在VB.NET中可以如下实现:
        Private   Sub   SaveToolStripButton_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   SaveToolStripButton.Click
                If   Not   (Me.ActiveMdiChild   Is   Nothing)   Then
                        Dim   ActiveChild   =   Me.ActiveMdiChild
                        ActiveChild.SaveData()
                End   If
        End   Sub

在C#中:
                private   void   saveToolStripButton_Click(object   sender,   EventArgs   e)
                {

                        if   (this.ActiveMdiChild   !=   null)
                        {
                               
                                Form   ActiveChild;
                                ActiveChild   =   this.ActiveMdiChild;
                                ActiveChild.SaveData();
                        }
出现错误提示:
错误 1 “System.Windows.Forms.Form”并不包含“SaveData”的定义

不知大侠们如何解决类似的情况?

------解决方案--------------------
ActiveChild 要转换成你的子窗体的类型,如下:
private void saveToolStripButton_Click(object sender, EventArgs e)
{
if (this.ActiveMdiChild != null)
  {
    Form ActiveChild;
    ActiveChild = this.ActiveMdiChild;
    SubForm f=ActiveChild as SubForm;
if (f!=null)
{
     f.SaveData();
}
  }


或用接口来实现,让你的所有子窗口都继承这个接口,然后,在主窗体的事件里通过接口来调用SaveData方法,这个方法最合适.