现有两个窗体...如何将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();
这样就行了。
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
果真是高手!!学习学习
#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);
想加什么窗体就加什么窗体
一。建三个窗体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();
这样就行了。
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
果真是高手!!学习学习
#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);
想加什么窗体就加什么窗体
一。建三个窗体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里不就行了