【问题标题】:Winform - Groupbox & Controls?Winform - 组框和控件?
【发布时间】:2009-11-22 23:57:52
【问题描述】:

在 Winform 中,我有一个 groupbox 和几个 Textbox 控件。如果我删除 Groupbox,文本框也会被删除。它们以某种方式与 Groupbox 相关联,尽管我没有故意为此做任何事情。 问题 - 我怎样才能删除这个连接,以便我可以删除组框并在表单上仍然有文本框?

【问题讨论】:

    标签: winforms


    【解决方案1】:

    子控件有一个 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;
        }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-13
          • 1970-01-01
          相关资源
          最近更新 更多