如何将控件从一个面板复制到另一个面板并保持对齐?

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