我想实现以下功能:
    当我点击按钮打开一个mdi窗体的时候,如果第二次再点击该按钮(原子窗体没有关闭),不会再打开一个同样的mdi窗体,而是把已经打开的第一个窗体,置为所有打开的mdi窗体的最前面。当然,如果原子窗体打开后又关闭了,那么第二次点击该按钮的时候应该就是直接打开一个新的mdi子窗体

解决方案 »

  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;
            }
    只要传进去子窗体的名字去判断就可以了
    以下为一个实例
            private void button2_Click(object sender, EventArgs e)
            {
                if (this.checkChildFrmExist("frm_Jinhuodan") == true)
                {
                    return;
                }
                frm_Jinhuodan fm = new frm_Jinhuodan();
                fm.MdiParent = this;
                fm.Show();
            }
      

  2.   

    同意楼上,foreach 里 用switch 比较好
      

  3.   


        public partial class Form1 : Form
        {
            Form2 form2 = new Form2();
            Form3 form3 = new Form3();
            public Form1()
            {
                InitializeComponent();
                form2.MdiParent = this;
                form3.MdiParent = this;
            }        private void button1_Click(object sender, EventArgs e)
            {
                if (form2.IsDisposed)
                {
                    form2 = new Form2();
                }
                form2.Visible = true;
                form2.BringToFront();
            }        private void button2_Click(object sender, EventArgs e)
            {
                if (form3.IsDisposed)
                {
                    form3 = new Form3();
                }
                form3.Visible = true;
                form3.BringToFront();
            }
        }
      

  4.   

    4楼的朋友运行过代码吗?
    他怎么提示:
    被指定为此窗体的 MdiParent 的窗体不是 MdiContainer。
    参数名: value这个错误?如果把
    form2.MdiParent = this;
    form3.MdiParent = this;
    放按钮事件就好用了。
    但是关闭再打开的话就不是子窗体了,可以脱离父窗体
      

  5.   


    this.IsMdiContainer = true;       // already called in InitializeComponent();
    ...
    form2.MdiParent = this;
    form3.MdiParent = this;