2种思路,看你喜欢
1.不管是否已经打开,都打开个新的,同时判断如果有旧的,关掉
2.判断已经打开了,那么执行下form.Active让它获得焦点,同时设置下最大化

解决方案 »

  1.   

     frmAdd.MdiParent = this; 我感觉这个多余滴!为什么要设父窗体?你那遍历 没搞懂你要干嘛?是要判断是否打开过某个窗体码?
    给一段我的代码://主窗体里
              public Login login = null;   //Login  子窗体名=== frmRecordCapital
            //登录
            private void btnLogin_Click(object sender, EventArgs e)
            {
                if (login == null)
                {
                    login = new Login(this);
                    login.ShowDialog();   //阻态框显示     //也可以直接   login.Show();
                }
            }
    //子窗体里
            Form1 frm1 = new Form1();   //也可以不new
            #endregion
            public Login(Form1 frm)  //构造函数里  加 Form1 frm
            {
                frm1 = frm;   //这个必须有
                InitializeComponent();
                FormClosing += new FormClosingEventHandler(Login_FormClosing);   //
            }
            private void Login_FormClosing(object sender, FormClosingEventArgs e)
            {
                frm1.login = null;   //
            }//就这样解决了你上面所有问题  //代码直接复制可用
      

  2.   

      #endregion  这符号忘记去掉了  在它上面加个  #region  也行
      

  3.   

    这就用到单例模式了
    类最好只负责他自己的事情,显然是否已存在是弹出的子窗口自己的事情
        public partial class FrmAdd : Form
        {
            private static FrmAdd form;        public static FrmAdd CreateForm()
            {
                if (form == null || form.IsDisposed)
                    form = new FrmAdd();
                form.Activate();
                return form;
            }
            private FrmAdd()//私有化构造方法,确保外部无法随意实例化
            {
                InitializeComponent();
            }
        }那么调用:
            private void button1_Click(object sender, EventArgs e)
            {
                FrmAdd form = FrmAdd.CreateForm();
                form.MdiParent = this;
                form.Show();
            }
    随便执行多少次都只会有一个FrmAdd实例
      

  4.   

    frmAdd.Activate();
    ->
    frm.Activate();