c#中怎样把一个窗体中的所有控件放到另一个窗体的Panel中呢...?

时间:2022-08-30 21:23:06
各位高手...
现有两个窗体...如何将FORM2中的所有控件加载到FORM1中的Panel1中呢....?
我用

        Form2 frm= new Form2();
            foreach (Control er in frm.Controls)
            {
                this.Panel1.Controls.Add(er);
            }
怎么会发生有部分控件丢失的现象呢...?

谢谢...

16 个解决方案

#1


只是显示的问题吧。

#2


那怎么解决呢....?

#3


搂主不应该循环,而应该直接把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();

这样就行了。

#4


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

#5


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

#6


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

#7


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

#8


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

#9


学习

#10


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

#11


引用 3 楼 net5i 的回复:
搂主不应该循环,而应该直接把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(); 

这样就行了。


果真是高手!!学习学习

#12


学习学习。。。

#13


也可以这样
一。建三个窗体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);
想加什么窗体就加什么窗体

#14


分太少,多点就帮你搞定了

#15


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

#16


直接把Form到Panel里不就行了

#1


只是显示的问题吧。

#2


那怎么解决呢....?

#3


搂主不应该循环,而应该直接把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();

这样就行了。

#4


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

#5


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

#6


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

#7


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

#8


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

#9


学习

#10


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

#11


引用 3 楼 net5i 的回复:
搂主不应该循环,而应该直接把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(); 

这样就行了。


果真是高手!!学习学习

#12


学习学习。。。

#13


也可以这样
一。建三个窗体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);
想加什么窗体就加什么窗体

#14


分太少,多点就帮你搞定了

#15


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

#16


直接把Form到Panel里不就行了