首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winform - Groupbox & Controls?

Winform - Groupbox & Controls?
EN

Stack Overflow用户
提问于 2009-11-23 07:57:53
回答 3查看 4.2K关注 0票数 3

在Winform中,我有一个分组框和几个Textbox控件。如果我删除Groupbox,文本框也会被删除。它们以某种方式与Groupbox捆绑在一起,尽管我并没有故意做任何事情来实现这一点。问题-如何删除此连接,以便删除分组框并保留表单上的文本框?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-24 00:18:58

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

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

代码语言:javascript
复制
    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;
    }
票数 5
EN

Stack Overflow用户

发布于 2009-11-24 00:28:43

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

代码语言:javascript
复制
this.groupBox1.Controls.Add(this.textBox2);
this.groupBox1.Controls.Add(this.textBox1);

将它们更改为:

代码语言:javascript
复制
this.Controls.Add(this.textBox2);
this.Controls.Add(this.textBox1);

这将使它们的容器成为表单,而不是groupbox,然后您可以删除groupbox。然而,这将移动文本框,因为它们的位置值相对于它们的容器是Groupbox。

票数 5
EN

Stack Overflow用户

发布于 2009-11-23 08:00:28

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1780466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档