我想让子窗体每次打开只显示一次,第一次打开的时候是可以的。但是关闭子窗体再次打开的时候就出现如下的情况了:
子窗体显示代码如下:
  
          public static int rs = 0;//初始化为0
          ReaderSytle RS = new ReaderSytle();//*****控制窗体打开的个数,如果已经打开就不能再打开
            if (rs == 1)
                MessageBox.Show("帮助 窗体已经打开!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            else
            {
                RS.MdiParent = this;
                RS.Show();
                rs = 1;
            }

解决方案 »

  1.   

            //查询子窗体是否存在
            private bool CheckChildFrmExist(string childFrmName)
            {
                foreach ( Form childFrm in this.MdiChildren )
                {
                    //用子窗体的Name进行判断,如果已经存在则将他激活
                    if ( childFrm.Name == childFrmName )
                    {
                        if ( childFrm.WindowState == FormWindowState.Minimized )
                            childFrm.WindowState = FormWindowState.Normal;
                        childFrm.Activate();
                        return true;
                    }
                }
                return false;
            }
      

  2.   


    楼上正解, 可以通过  MdiForm.MdiChildren遍历所有子窗体 
      

  3.   

    这个使用一个类变量就可以了啊:
    ReaderSytle RS = null;//在方法外部声明//方法内部代码
    {
      if(RS == null || RS.IsDisposed)
      {
        RS = new ReaderSytle();//
      }
      RS.MdiParent = this;
      RS.Show();
    }
      

  4.   

    try
                {
                    System.Windows.Forms.Form[] mdiForm = this.MdiChildren;
                    bool openFlage = false;
                    foreach (Form fr in mdiForm)
                    {
                        if (fr.Name == "FcImportRecQuery")
                        {
                            fr.Activate();
                            fr.WindowState = FormWindowState.Maximized;
                            openFlage = true;
                            break;
                        }
                    }
                    if (!openFlage)
                    {
                        Yj_SrvForm.FcImportRecQuery nSG = new Yj_SrvForm.FcImportRecQuery(true);
                        nSG.MdiParent = this;
                        nSG.WindowState = FormWindowState.Maximized;
                        this.Update();
                        nSG.Show();
                    }
                }
                catch (Exception exc) { Yj_CommonFunction.ShowMessagebox(exc, this, 0, null); }
      

  5.   

    没弄明白,是想做个单件吗? 
    如果想让窗体在程序中唯一到可以试下下面..       
            private static Form1  _form1 = null;
            private  Form1()
            {
                InitializeComponent();
                
            }
            public static Form1 CreateForm1()
            {
                if (_form1 == null )
                {
                  
                    _form1 = new Form1();
                }            
                return _form1;
            }
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                Form1._form1 = null;    // 如果关闭的话,清空窗体类中的_form1的引用.
            }
      

  6.   

    修改了一下2楼的算法,关闭再打开一切正常
     private void subForm1ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                if (CheckChildFrmExist(f2.Name))
                {
                    f2.MdiParent = this;
                    f2.Show();
                }
                else
                {
                    MessageBox.Show("fail");
                }
            }
    private void subForm2ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form8 f8 = new Form8();
                if (CheckChildFrmExist(f8.Name))
                {
                    f8.MdiParent = this;
                    f8.Show();
                }
                else
                {
                    MessageBox.Show("fail");
                }
            }        private bool CheckChildFrmExist(string childFrmName)
            {
                bool result = false;
                if (this.MdiChildren.Length >= 1)
                {
                    foreach (Form childFrm in this.MdiChildren)
                    {
                        //用子窗体的Name进行判断,如果已经存在则将他激活
                        if (childFrm.Name != childFrmName)
                        {
                            if (childFrm.WindowState == FormWindowState.Minimized)
                            {
                                childFrm.WindowState = FormWindowState.Normal;
                            }
                            childFrm.Activate();
                            result = true;
                        }
                        else
                        {
                            result = false;
                            break;
                        }
                        
                    }
                    return result;
                   
                }
                else
                {
                    return true;
                }
            }