Winforms Winform-Groupbox&;控制?

Winforms Winform-Groupbox&;控制?,winforms,Winforms,在Winform中,我有一个groupbox和几个Textbox控件。如果我删除Groupbox,文本框也会被删除。他们不知何故与Groupbox联系在一起,尽管我并没有故意为此做任何事情。 问题-如何删除此连接,以便删除groupbox,并在表单上保留文本框 删除前将文本框移出groupbox 另一个选项是手动编辑设计器生成的文件(Foo.designer.cs)并删除其中的groupbox。成员声明位于设计器文件的最末尾,而所有安装工作都在InitializeComponent()中完成。如

在Winform中,我有一个groupbox和几个Textbox控件。如果我删除Groupbox,文本框也会被删除。他们不知何故与Groupbox联系在一起,尽管我并没有故意为此做任何事情。
问题-如何删除此连接,以便删除groupbox,并在表单上保留文本框

删除前将文本框移出groupbox


另一个选项是手动编辑设计器生成的文件(Foo.designer.cs)并删除其中的groupbox。成员声明位于设计器文件的最末尾,而所有安装工作都在
InitializeComponent()中完成。如果您先删除成员声明,编译器错误将指向仍需要删除某些行的位置。它有点工作,但和往常一样,手工编辑自动生成的文件时要小心:-)

子控件具有父属性。如果删除其父级,Windows窗体也会自动对子级调用Dispose()。这也是关闭表单时不必自己显式调用子控件上的Dispose()的原因之一

获取所需内容非常简单,可以使用以下.Controls.add()方法将子项添加到表单中。WF会自动将它们从groupbox中删除,因为子控件只能有一个父控件。一些示例代码:

    private void button1_Click(object sender, EventArgs e) {
        int nextTab = 0;
        foreach (Control ctl in this.Controls) nextTab = Math.Max(nextTab, ctl.TabIndex);
        Point offset = groupBox1.Location;
        for (int ix = groupBox1.Controls.Count - 1; ix >= 0; --ix) {
            Control ctl = groupBox1.Controls[ix];
            ctl.Location = new Point(ctl.Left + offset.X, ctl.Top + offset.Y);
            ctl.TabIndex += ++nextTab;
            this.Controls.Add(ctl);
        }
        groupBox1.Dispose();
        groupBox1 = null;
    }

在Designer.cs文件中,您将有一系列代码行,如:

this.groupBox1.Controls.Add(this.textBox2);
this.groupBox1.Controls.Add(this.textBox1);
改为:

this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);
这将使它们的容器成为表单而不是groupbox,然后可以删除groupbox。 但是,这将移动文本框,因为它们的位置值是相对于其容器(即Groupbox)的