在父窗体中点击按钮打开新的子窗体的同时关闭上一个打开的子窗体、怎么实现?

解决方案 »

  1.   

    private void button1_Click(object sender, EventArgs e)
            {
                if (this.OwnedForms.Length != 0)
                {
                    foreach (Form form in this.OwnedForms)
                    {
                        form.Dispose();
                    }
                }
                Form2 subForm1 = new Form2();
                subForm1.Owner = this;
                subForm1.Show();
            }        private void button2_Click(object sender, EventArgs e)
            {
                if (this.OwnedForms.Length != 0)
                {
                    foreach (Form form in this.OwnedForms)
                    {
                        form.Dispose();
                    }
                }
                Form3 subForm2 = new Form3();
                subForm2.Owner = this;
                subForm2.Show();
            }
      

  2.   


    FoxDave的方法很不错,不过有点复杂。
    如果是模式窗体的话是不可以的。要关闭的话,直接把窗体名。close; Form3 subForm2 = new Form3();
                subForm2.Owner = this;
    this.close();
                subForm2.Show();
      

  3.   

    你可以将子窗体的owner属性设为父窗体,当打开一个新窗体前,先循环父窗体的owner属性,如果有窗体,就将其关闭,然后,打开新窗体
      

  4.   

    private void btn1_click()
    {
    Form2 frm2=new Form2();
            frm2.Owner=this;
    frm2.show();
    }private void btn2_click()
    {
    Form3 frm3=new Form3();closeForm(this.OwnedForms);frm2.Owner=this;
    frm2.show();
    }
    private void closeForm(Form[] frms )
    {
    foreach(Form frm in  frms )
    {
    frm.close()
    if(frm.OwnedForms.Length >0)
    closeForm(frm.OwnedForms);
    }
     
    }
      

  5.   

    //都是父窗体中的代码
    private void btn1_click()
    {    
    Form2 frm2=new Form2();
            frm2.Owner=this;
    frm2.show();
    }private void btn2_click()
    {    
    closeForm(this.OwnedForms);
    Form3 frm3=new Form3();
    frm2.Owner=this;
    frm2.show();
    }
    private void closeForm(Form[] frms )
            {
                foreach(Form frm in  frms )
                {
                    frm.close()
                    if(frm.OwnedForms.Length >0)
                        closeForm(frm.OwnedForms);
                }
     
            }
      

  6.   

    更正一下
    private void btn2_click()
    {    
    closeForm(this.OwnedForms);
    Form3 frm3=new Form3();
    frm3.Owner=this;
    frm3.show();
    }
      

  7.   

    你打开的窗体的时候有没有指定owner?
      

  8.   

    if (this.MdiChildren.Length != 0) 
    // 先判断 有没有子窗体
    ActiveMdiChild 获取 子窗体
     然后关闭  打开NEWBUTTON 下的窗体  
      

  9.   

    Form1 form1 = new Form1();
                Form2 form2 = new Form2();
                if (this.MdiChildren.Length != 0)
                {
                    if (this.ActivateMdiChild = form1)
                    {
                        form1.closed();
                        form2.show();
                    }
                    if (this.ActivateMdiChild = form2)
                    {
                        form2.closed();
                        form1.show();
                    }
                }
                else { return; }
      

  10.   

    this.ActivateMdiChild    获取的 就是当前窗体啊
      

  11.   

    不是固定的 才用 if (this.ActivateMdiChild = form1) 判断啊  窗体多的  麻烦
       
      

  12.   


    if (this.ActivateMdiChild = form1)
    这里还是出问题、说ActivateMdiChild 是一个方法组无法赋值
      

  13.   

            Form2 f2;
            private void button1_Click(object sender, EventArgs e)
            {
               
                if (f2 == null)
                {
                    f2 = new Form2();
                    f2.Show();
                }
                else
                {
                    f2.Close();
                    f2 = new Form2();
                    f2.Show();
                }
             }
      

  14.   

    在不行 你用这个  不要关闭上一个窗体 
    Form1  form1 = null;
            private void button_Click(object sender, EventArgs e)
            {
                if (form1 == null)
                {
                    form1 = new DistrictInformation();
                    form1.MdiParent = this;
                    form1.WindowState = FormWindowState.Maximized;
                    form1.Show();
                }
                else
                {
                    if (form1.IsDisposed)
                    {
                        form1 = new DistrictInformation();
                    }
                    form1.MdiParent = this;
                    form1.WindowState = FormWindowState.Maximized;
                    form1.Show();
                    form1.Focus();
                }
      

  15.   

    DistrictInformation() 改成 Form1()
      

  16.   

    private void button2_Click(object sender, EventArgs e)
            {
                
                CallcenterForm callC = new CallcenterForm();
                Frmcx cx = new Frmcx();
                Frmclgl clgl = new Frmclgl();
                            if (this.MdiChildren.Length != 0)
                {
                    if (this.ActivateMdiChild == callC)
                    {
                        callC.Close();
                        clgl.Show();
                    }
                    if (this.ActivateMdiChild == cx)
                    {
                        cx.Close();
                        clgl.Show();
                    }
                }
                else { return; }
      

  17.   

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 fm2 = new Form2();
                if (this.OwnedForms.Length != 0)
                {
                    foreach (Form fm in this.OwnedForms)
                    {
                        fm.Close();
                    }
                }
                fm2.Owner = this;
                fm2.Show();
            }        private void button2_Click(object sender, EventArgs e)
            {
                Form3 fm3 = new Form3();
                if (this.OwnedForms.Length != 0)
                {
                    foreach (Form fm in this.OwnedForms)
                    {
                        fm.Close();
                    }
                }
                fm3.Owner = this;
                fm3.Show();        } 
      

  18.   

    private void button2_Click(object sender, EventArgs e)
    {    
    closeForm(this.OwnedForms);Frmclgl clgl = new Frmclgl();
    clgl.Owner = this;
    clgl.MdiParent = this;
    clgl.Show();}
    private void closeForm(Form[] frms )
            {
                foreach(Form frm in  frms )
                {
                    frm.close()
                    if(frm.OwnedForms.Length >0)
                        closeForm(frm.OwnedForms);
                }
     
            }
      

  19.   

    clgl.MdiParent = this;
    这句不要
      

  20.   

    private void button2_Click(object sender, EventArgs e)
            {
                Frmclgl clgl = new Frmclgl();
                if (this.OwnedForms.Length != 0)
                {
                    foreach (Form fm in this.OwnedForms)
                    {
                        fm.Close();
                    }
                }
                clgl.Owner = this;
                clgl.MdiParent = this;
                clgl.Show();
    这样写之前已经打开的窗体还是没有关闭
      

  21.   

    上面这个是多个Bitton控制 
      

  22.   

    clgl.MdiParent = this;
    这句不要
      

  23.   


    Frmclgl clgl = null;
    private void button2_Click(object sender, EventArgs e)
            {
                if (clgl == null)
                {
                    clgl = new Frmclgl();
                    clgl.MdiParent = this;
                    clgl.WindowState = FormWindowState.Maximized;
                    clgl.Show();
                }
                else
                {
                    if (clgl.IsDisposed)
                    {
                        clgl = new Frmclgl();
                    }
                    clgl.MdiParent = this;
                    clgl.WindowState = FormWindowState.Maximized;
                    clgl.Show();
                    clgl.Focus();
                }后面的窗体还是没关闭
      

  24.   

    private void button2_Click(object sender, EventArgs e)
            {
                Frmclgl clgl = new Frmclgl();
                if (this.MdiChildren.Length != 0)
                {
                    foreach (Form fm in this.MdiChildren)
                    {
                        fm.Close();
                    }
                }
                clgl.MdiParent = this;
                clgl.Show();
      

  25.   


    运算符“==”无法应用于方法组和CallcenterForm类型的操作数
      

  26.   

    其实楼上有很多方法也是可以的,clgl.MdiParent 和clgl.Owned不能同时用
      

  27.   

    是要关闭除主窗体之外的窗体吗?foreach(Form in Application.OpenForms)
    {
        if(form.Handle != this.Handle)
        {
           form.Close(); 
        }
    }