现有FormMain,FormA,FormB,FormC。其中,FormMain是主窗体。
隐藏FormMain,显示FormA。
FormA formA =new  FormA();
formA.Show();
this.Hide();一段时间后,关闭FormA,显示FormB
FormB formB =new  FormB();
formB.show();
this.Close();一段时间后,关闭FormB,显示FormC
FormC formC =new  FormC();
formC.show();
this.Close();请问,如何在主窗体(FormMain)判断其他窗体是否存在或显示,谢谢。

解决方案 »

  1.   

    如果其他A\B\C\窗体是FormMain的子窗体,则可以遍历比对。Form[] forms = this.MdiChildren;
    for (int i = 0; i < forms.Length; i++)
                    {
                        if (forms[i].Name == "窗体名")
                        {
                           你的处理代码;
                        }                }
      

  2.   

    楼主好像没有利用主窗体和子窗体的关系 MdiParent和MdiChildren所以你只能在主窗体里加一个变量 如
    Form frmCurrChild; //当前显示的子窗体再在每个“子”窗体里各加一个主窗体的变量 如
    FormMain frmMain;下面是关键代码
    隐藏FormMain,显示FormA。
     FormA formA =new  FormA();
     formA.frmMain=this;
     this.frmCurrChild=formA;

     formA.Show();
     this.Hide();一段时间后,关闭FormA,显示FormB
     FormB formB =new  FormB();
     formB.frmMain=this.frmMain;
     formB.frmMain.frmCurrChild=formB;

     formB.show();
     this.Close();一段时间后,关闭FormB,显示FormC
     FormC formC =new  FormC();
    formC.frmMain=this.frmMain;
     formC.frmMain.frmCurrChild=formC;

     formC.show();
     this.Close();主窗体里的frmCurrChild是谁,当前子窗体就是谁了
      

  3.   

    如果你利用了主窗体和子窗体的MdiParent和MdiChildren属性,那么按1楼的方法就可以知道当前是那个子窗体
      

  4.   

    不是子窗体。
    另外,在FormB中创建的formC,怎样才能在主窗体(FormMain)中操作(比如关闭formC)。
      

  5.   

    按2楼我给你代码
    在FormMain里直接写
    frmCurrChild.Close();就把formC关了(假定当前子窗体是formC)
      

  6.   

    我的描述有些不恰当。FormMain,是主程序窗体,并非MdiParent。
    FormMian,和FormA,FormB,FormC是同类型的窗体。
      

  7.   

    FormA,FormB,FormC 在FormMain中定义为私有成员变量,判断它们是否为null就可以了...
      

  8.   

     如果是通用编程,使用一个全局静态Dictionary<string,Form> 字典类保留一下form集合就ok如果只是就事论事,则在子窗体里放一个静态枚举属性,就是了。
      

  9.   

    还可以在每个窗体中调用API函数findwindows()进行查找,找到了你想干嘛就干嘛。