FORM1为 MDI窗体,FORM2为FORM1的子窗体,在FORM2上点击按钮创建窗体FORM3,如何使FORM3也成为FORM1的子窗?

解决方案 »

  1.   

    form3.mdiparent = form1; 
      

  2.   

    设置Form3的MdiParent属性为Form1不可以吗?
      

  3.   

    在打开事件里写
    Form3 f3 = new Form3();
    f3.MdiParent = this.MdiParent;
    f3.Show();
      

  4.   

    如果你是在form2里写的,可能需要这样写:
    form3.MdiParent = form2.MdiParent;
      

  5.   

    MDI只有一个,如果是子窗体只要通过Show(父窗体)或ShowDialog(父窗体)就可以了,楼主可以参考一下这篇文章,
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx
      

  6.   

    Form1 MDI主窗口namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                Form2 form2 = new Form2();
                form2.MdiParent = this;
                form2.Show();
            }
        }
    }Form2namespace WindowsFormsApplication2
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form3 form3 = new Form3();
                form3.MdiParent = this.MdiParent;
                form3.Show(); 
       
            }
        }
    }
      

  7.   

    其实上面有正解啊首先你需要确定你是否第一个主窗体和子窗体间 已经正确的建立了MDI关系!
    其实我想楼主你问这个问题的话,应该是建立的关系!其实子窗体创建的新的窗体要继续延续子窗体和主窗体的MDI关系 只要获取子窗体的MdiParent特点就行了在子窗体创建新窗体的事件里面//先new一个新窗体对象  (下面以新窗体为form3为例子,具体的以你创建的窗体名称来定)
    Form3 fm3=new Form3();//然后对象获取MdiParent的特性     下面的this.MdiParent就是把子窗体和主窗体的父子关系传给新创建的窗体
    fm3.MdiParent=this.MdiParent;   //接下来显示新窗体
    fm3.Show();//如果你需要隐藏或者关闭当前子窗体就写
    this.Colse();
      

  8.   

    9楼的:
         运行结果如下
      
    ************** 异常文本 **************
    System.ArgumentException: 只能向 MdiClient 添加 MDI 子窗体。
      

  9.   

    你有没有把form1主窗口的IsMdiContainer设置成true了?我测试是通过的
      

  10.   

    按道理是应该设了 不然它第一个子窗体怎么能形成MDI关系窗体呢?  private void button1_Click(object sender, EventArgs e)
            {
                Form3 form3 = new Form3();
                form3.MdiParent = this.MdiParent;
                form3.Show(); 
       
            } 代码这样实现 肯定是没错的  应该是细节地方出了问题 
      

  11.   

    9楼的没错。如果有问题,有可能是以下2点:
    form1主窗口的IsMdiContainer要设置成true
    如果是写form3.ShowDialog();会报错,因为form3已经有了父窗体。
      

  12.   

    是我写错了!我把Mdiparent 写成了 parent,郁闷啊……