父窗口上有两个按钮,新建和退出,当我点击新建按钮时,创建一个子窗口,点击退出按钮时,子窗口也会关闭,并且点击多次点击新建按钮时不会创建几个子窗口。请问这怎么实现?

解决方案 »

  1.   

    foreach (Form f in this.OwnedForms)
        {
        if (f.GetType().Name == "Form2")
        {
        f.Show();
        f.Focus();
        return;
        }
    }
    Form2 f2 = new Form2();
    f2.Show(this);
      

  2.   

    你新建的时候new一个form吧就好了吗
    然后知道form的属性,比如位置,大小等等
    然后指定新建窗体的父窗体
    这样关闭父窗体子窗体就关闭了多次点击只新建一个的话那你就要查找有没有已经建立你要的窗体了
    有的话就放到前面,没有的话就建立
    或者是建立之后做个标志字符,然后检查该字符的值来判断
      

  3.   

    父窗口的IsMdiContainer属性为true
      

  4.   

    用event完全能够符合你的要求,不过我写的代码Vb.net要不
      

  5.   


            Form mdiChildForm = new Form(); private void Form1_Load(object sender, System.EventArgs e)
    {
    IsMdiContainer = true;
    mdiChildForm.MdiParent = this;
    }
      

  6.   

    我是想另弹出一个窗口,可以不用“IsMdiContainer”吗
      

  7.   

    窗体一
    Public Class Form1    Dim f2 As New Form2
        '退出按钮
        Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            RaiseEvent Onclicks()
        End Sub    Public Event Onclicks()
        '新建窗体按钮
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            f2.MainForm = Me
            f2.MdiParent = Me
            f2.Show()
        End Sub
    End Class窗体二
    Public Class Form2
        Public WithEvents MainForm As Form1
        Private Sub MainForm_OnClickButton() Handles MainForm.Onclicks
            Me.Hide()
        End Sub
    End Class
      

  8.   

    这是按你的MDI窗体要求写的,可以把代码变换一下如果不用MDI更容易实现
      

  9.   

    你只需设置一个属性,你提的所有要求都解决了,只需要父窗口中的Form1_Load中设置IsMdiContainer = true,在新建按钮的点击事件中弹出子窗口,并设置了窗口的MdiParent 的属性为this,就是这么简单的事情
      

  10.   


    private void Form1_Load(object sender, System.EventArgs e)
    {
    IsMdiContainer = true;//就这一句话
    }
    private void 新建_onclick(object sender, System.EventArgs e)
    {
    Form mdiChildForm = new Form();//子窗口
    mdiChildForm.MdiParent = this;
    mdiChildForm.show();
    }完整代码给你写出
      

  11.   

    搞什么啊,我1楼就给了正确方法了,居然不看,IsMdiContainer肯定不行的,那个是不能另外弹出窗口的。至于VB那代码,也就实现了我给的功能中的一小部分。
      

  12.   

    你要设置有【新建】按钮控件的窗口IsMdiContainer 属性为true,你设置错误了
      

  13.   

    IsMdiContainer肯定不行的,那个是不能另外弹出窗口的,你的这句话什么意思?你理解MDI窗口吗?
      

  14.   

    是按这个方法来做的吗:http://blog.sina.com.cn/s/blog_54b76ebe010001qq.html
      

  15.   


    private Form2 frm;
            private void button1_Click(object sender, EventArgs e)
            {
                if (frm==null||frm.IsDisposed)
                {
                    frm = new Form2();
                    frm.Show();
                }
            }        private void button2_Click(object sender, EventArgs e)
            {
                if (frm != null)
                {
                    frm.Close();
                }
            }
      

  16.   


    Form myform = null;void create_Click(object sender,EventArgs e)
    {
      if(myform == null)
      {
        myform = new Form();
        myform.Show();
      }
    }void close_Click(object sender,EventArgs e)
    {
      if(myform != null)
      {
        myform.Close();
        myform = null;
      }
    }
      

  17.   


    private void Form1_Load(object sender, System.EventArgs e)
    {
    IsMdiContainer = true;//在有【新建】按钮的窗口中设置
    }
    Form mdiChildForm ;//声明子窗口对象
    private void button1_Click(object sender, System.EventArgs e)
    {
    //子窗口只能打开一次
     if (mdiChildForm  == null || mdiChildForm .IsDisposed)
    mdiChildForm = new Form();//子窗口
    mdiChildForm.MdiParent = this;
    mdiChildForm.show();}else{
    mdiChildForm.Activate();//子窗口获取焦点
    }
    }
      

  18.   

    foreach (Form childrenForm in this.MdiChildren)
      {
      //检测是不是当前子窗体名称
      if (childrenForm.Name == "子窗体名称")
      {
      //是的话就是把他显示
      childrenForm.Visible = true;
      //并激活该窗体
      childrenForm.Activate();
      return;
      }
      }
      //打开子窗体
      Form1 childrenForm = new Form1();
      childrenForm.MdiParent = this;
      childrenForm.Show();
      childrenForm.WindowState = FormWindowState.Maximized;
      

  19.   

    很简单的功能 LZ看下window.open()方法的参数 就行了 呵呵 别用别人现成的 不然你学不到东西的 
      

  20.   

    在子窗口的构造函数中采用单例模式,在父窗口直接new 子窗口即可。
      

  21.   

    我刚刚实现,呵呵
    private void ultraExplorerBar1_ItemClick(object sender, Infragistics.Win.UltraWinExplorerBar.ItemEventArgs e)
            {
                string formClass = "Checker." + e.Item.Key;
                Type formType = Type.GetType(formClass);
                if (null != formType)
                {
                    bool IsInitForm = false;
                    Form newForm = null;
                    foreach (Form f in this.MdiChildren)
                    {
                        if (f.Name == e.Item.Key)
                        {
                            newForm = f;
                            IsInitForm = true;
                            break;
                        }
                    }
                    if (!IsInitForm)
                    {
                        newForm = Activator.CreateInstance(formType) as Form;
                    }                if (null != newForm)
                    {
                        newForm.MdiParent = this;
                        newForm.Show();
                        newForm.Activate();
                    }
                }
            }
    不明白问我
      

  22.   

    foreach (Form f in this.OwnedForms)
        {
        if (f.GetType().Name == "Form2")
        {
        f.Show();
        f.Focus();
        return;
        }
    }
    Form2 f2 = new Form2();
    f2.Show(this);
      

  23.   

    C#:
    在父窗体 中  点击“新建”按钮事件中  添加:子窗体对象 UM = new Cothink_Form.User.子窗体对象 ();
                foreach (Form frm in this.MdiChildren)//遍历已打开的MDI
                {
                    if (frm.Name == UM.Name)
                    {
                        frm.Close();
                    }
                }
                UM.MdiParent = this;
                UM.WindowState = FormWindowState.Maximized;
                UM.Show();
      

  24.   

    父窗体里定义一个成员变量 ,在创建的时候 New这个成员,退出的时候销毁它
    Form2 mfrmSub=null;
    //创建
    private void cmdNew_Click ( object sender , EventArgs e )
            {
                if ( null==mfrmSub || mfrmSub.IsDispose() )
                {
                    mfrmSub=new Form2();
                }
                mfrmSub.Show(this);
            }
    //退出
    private void cmdClose_Click ( object sender , EventArgs e )
            {
                if ( null!=mfrmSub )
                {
                    mfrmSub .Close();            }
                
            }