如何将控件从一个面板复制到另一个面板并保持对齐?
How do I copy controls from one panel to another and keep aligned?
我有两个大小相同的表单,每个表单内部都有一个具有相同位置值的面板。在 form1
上,我有一个按钮可以在 onclick
事件上将所有控件从 form2
复制到 form1
。它可以工作,有点,它复制了所有控件,但它们在 form1
上没有像在 form2
.
中那样对齐
表格 1:
表格 2:
以及 change
按钮的代码:
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2();
this.panel1.Controls.Clear();
foreach(Control control in form2.panel1.GetAllControls())
this.panel1.Controls.Add(control);
}
GetAllControls()
编译器扩展的代码:
public static IEnumerable<Control> GetAllControls(this Control root)
{
foreach (Control control in root.Controls)
{
foreach (Control child in GetAllControls(control))
{
yield return child;
}
}
yield return root;
}
点击更改按钮后,我得到了这个(未对齐的标签):
请注意,该位置与 form2
中定义的位置不匹配(我创建的两者具有相同的大小和位置以完全匹配)。为什么会这样,我该如何解决?
编辑:为了从 form2
访问 panel1
我做了它的修饰符 public
查看对齐类型不匹配...看来锚定是 3 个控件的问题...请在设计时检查 form2 中 3 个控件的锚 属性。
但我建议您采用另一种方法 - 不要复制单个控件,而是复制整个父控件。
因此,只需将 form2 的 panel1 添加到 form1 的 panel1 并将停靠样式(正在添加的此面板)设置为 fill
我有两个大小相同的表单,每个表单内部都有一个具有相同位置值的面板。在 form1
上,我有一个按钮可以在 onclick
事件上将所有控件从 form2
复制到 form1
。它可以工作,有点,它复制了所有控件,但它们在 form1
上没有像在 form2
.
表格 1:
表格 2:
以及 change
按钮的代码:
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2();
this.panel1.Controls.Clear();
foreach(Control control in form2.panel1.GetAllControls())
this.panel1.Controls.Add(control);
}
GetAllControls()
编译器扩展的代码:
public static IEnumerable<Control> GetAllControls(this Control root)
{
foreach (Control control in root.Controls)
{
foreach (Control child in GetAllControls(control))
{
yield return child;
}
}
yield return root;
}
点击更改按钮后,我得到了这个(未对齐的标签):
请注意,该位置与 form2
中定义的位置不匹配(我创建的两者具有相同的大小和位置以完全匹配)。为什么会这样,我该如何解决?
编辑:为了从 form2
访问 panel1
我做了它的修饰符 public
查看对齐类型不匹配...看来锚定是 3 个控件的问题...请在设计时检查 form2 中 3 个控件的锚 属性。
但我建议您采用另一种方法 - 不要复制单个控件,而是复制整个父控件。 因此,只需将 form2 的 panel1 添加到 form1 的 panel1 并将停靠样式(正在添加的此面板)设置为 fill