在Winform中,我有一个groupbox,其中有几个Textbox控件。如果删除组框,则文本框也将被删除。尽管我没有做任何有意为之的事情,但它们还是与Groupbox有联系。
问题-如何删除此连接,以便删除组框并在表单上保留文本框?

最佳答案

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

获得所需的东西很容易,使用this.Controls.Add()方法将子级添加到表单中。 WF会自动将它们从组框中删除,因为一个子控件只能有一个父级。一些示例代码:

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

10-08 14:08