Winform - Groupbox&控制?

时间:2009-11-22 23:57:53

标签: winforms

在Winform中我有一个groupbox,其中有几个Textbox控件。如果我删除了Groupbox,文本框也会被删除。它们在某种程度上与Groupbox有关,虽然我没有做任何明知的事情。 问题 - 如何删除此连接,以便我可以删除组框并且仍然在表单上有文本框?

3 个答案:

答案 0 :(得分:5)

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

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

    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;
    }

答案 1 :(得分:5)

在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。

答案 2 :(得分:4)

在删除文本框之前将其移出组框。

另一种选择是手动编辑设计器生成的文件(Foo.Designer.cs)并删除那里的组框。成员声明位于设计器文件的最后,而所有设置工作都在InitializeComponent()完成。如果首先删除成员声明,​​编译器错误应指向您仍需要删除某些行的位置。它有点工作,但一如既往,手动编辑自动生成的文件时要小心:-)。