各位高手...
现有两个窗体...如何将FORM2中的所有控件加载到FORM1中的Panel1中呢....?
我用        Form2 frm= new Form2();
            foreach (Control er in frm.Controls)
            {
                this.Panel1.Controls.Add(er);
            }
怎么会发生有部分控件丢失的现象呢...?谢谢...

解决方案 »

  1.   

    搂主不应该循环,而应该直接把Form到Panel里:Form2 frm= new Form2(); 
    frm.TopLevel = false;
    frm.Parent = this.panel1;
    frm.SetBounds(0,0,this.panel1.Width, this.panel1.Height);
    frm.Show();这样就行了。
      

  2.   

    控件有层次次序,不一定和controls里的次序一样
      

  3.   

    而且因为有层次关系,不光会覆盖,而且有父子关系,你把它们的父亲都一股脑赋值给frm怎么行
      

  4.   

    那样原来在A上面的B控件如果比A的话而且又是加入的次序让它在A的下层,那同样是新父亲panel的子控件的B不就被A覆盖率
      

  5.   

    那样原来在A上面的B控件如果比A小的话
      

  6.   

    要递归,例如:GroupBox是Panel中的控件,它本身也可以含控件
            private void AddControl(Control containCtrl)
            {
                foreach (Control ctrl in containCtrl.Controls)
                {
                    this.Panel1.Controls.Add(ctrl);
                    AddControl(ctrl);
                }
            }
      

  7.   

    狂晕,根本没这么麻烦的,用不着循环或递归,改变一下Form的Parent属性就可以了,如3楼
      

  8.   

    也可以这样
    一。建三个窗体FORM1,FORM2,FORM3
    二。在FORM1上放一下PANEL和一个BUTTON1
    三。把FORM2和FORM3的formBorderstyle=NONE;
    四。把FORM2,FROM3的大小设为与FORM1中的Panel1的大小一样大
    五。定义一个方法
    void showform(Form rightfrom)
            {
                rightfrom.FormBorderStyle = FormBorderStyle.None;
                rightfrom.TopLevel = false;
                panel1.Controls.Add(rightfrom);
                rightfrom.Show();
            }
    六。在BUTTONCLICK事件中加入
     Form2 frm = new Form2();
                showform(frm);
    想加什么窗体就加什么窗体
      

  9.   

    这种需求应该用用户控件(UserControl)才是正道...