子窗体      Name           Text
校历子窗体  Form_xiaoli    校历管理程序1. 添加静态变量,用来判断子窗体是否已打开。public static bool bXiaoliIsOpen=false;2.为主菜单项添加事件代码如下:public void tsmiXiaoli_Click( object sender,EventArgs e)
{
       OpenFormXiaoli();
}priave void OpenFormXiaoli()
{
       if( !bXiaoliIsOpen)
       {
          Form_Xiaoli frmXiaoli= new Form_Xiaoli();
          frmXiaoli.mdiParent=this;
          frmXiaoli.show();
       }
}
上面的代码是防止在主窗体中打开多个校历子窗体  可是问题来了当关了编译器 再重新运行时 在主窗体中就打不开校历子窗体了 因为bXiaoliIsOpen变成Ture了。我本来是想在主窗体中只能打开一个校历子窗体 且重新运行后 再能打开校历子窗体
有没有高手可以帮忙解决这个问题(本人非常感激)

解决方案 »

  1.   

    应该在关闭子窗体的时候设置一下bXiaoliIsOpen这个值
      

  2.   

    上面回答正确,每次子窗体被关闭要重新初始化该变量。
    另外其实用 Application.OpenForms["Form_xiaoli"] != null 就能判断是否已经打开了。
      

  3.   

    在Form_Closed、Form_Closing中关闭窗体时设置,方法有二:
    1)如1楼所说设置bXiaoliIsOpen属性
    2)可以不加bXiaoliIsOpen这个变量,设置tsmiXiaoli按钮的enabled的属性,创建窗体后设置为false,close窗体后设置为true
      

  4.   

    该类控制tblForm窗体只能打开一次:
    using System;namespace WFDT.MT {
      public class MT_ManageTableBizCtrlImpl {
      private ManageTableForm tblForm;  public MT_ManageTableBizCtrlImpl() { }
      public void ShowManageTableFrm() {
      if (null == tblForm || tblForm.IsDisposed) {
      tblForm = new ManageTableForm();
      tblForm.Show();
      } else {
      tblForm.Activate();
      }
      }
      }
    }
      

  5.   

    关闭的时候把bXiaoliIsOpen值归fale就好拉。
      

  6.   

    楼上各位说的一致,
    在Form_Closed、Form_Closing中关闭窗体时恢复
    bXiaoliIsOpen=false;
      

  7.   

        使用单例模式吧
          public  ManageTableForm{
             privata  static ManageTableForm   instance;
             private  ManageTableForm(){}
             public  static  ManangeTableForm    Instance{
                            if(instance==null){
                                 instance=new ManageTableForm();
                                 }
                            return  instance;
                     }
    }