清除Winforms GroupBox而不破坏内容

问题描述 投票:2回答:3

我想清除GroupBox的内容以用新选项填充它,但我不能使用Dispose()函数,因为我不想销毁其中的对象(来自另一个类的Textboxes)。有没有办法在不破坏内容的情况下清空GroupBox?

编辑:由于很难理解我想要什么,这是我试图做的(这是IronPython btw,但这不应该是一个问题)

def loadMethod(self, sender, e):
    self.MethodParaBox.Visible = True
    for i in self.MethodParaBox.Controls:
        self.MethodParaBox.Controls[0].Dispose()

    panel = Panel()
    panel.AutoScroll = True
    panel.Width = 150
    panel.Height = 130
    panel.Left = 25
    panel.Top = 25
    self.MethodParaBox.Controls.Add(panel)

    for i, z in enumerate(self.parent.getParameter(self.project.SelectedItem, self.design.SelectedItem)):
        if self.textBoxList[i].value.Enabled == False:
            label = Label()
            label.Left = 0
            label.Top = 30 * i
            label.Width = 80
            label.Text = z
            panel.Controls.Add(label)

            self.textBoxList[i].option3.Left = 90
            self.textBoxList[i].option3.Top = 0 + 30 * i
            self.textBoxList[i].option3.Width = 40
            panel.Controls.Add(self.textBoxList[i].option3)

如果我第二次调用此函数,它将抛出异常,因为文本框不再存在

c# winforms ironpython groupbox
3个回答
2
投票

试试ControlCollection.Remove

foreach(Control c in groupBox.Controls()) groupBox.Controls.Remove(c);

或者你可以使用groupBox.Controls.Clear()


1
投票

你可以使用Control.ControlCollection.Clear Method

  groupBox.Controls.Clear()

或者Control.ControlCollection.RemoveAt Method

While groupBox.Controls.Count > 0
    groupBox.Controls.RemoveAt(0)
End While

或者使用For循环使用Remove方法

For i As Integer = (groupBox.Controls.Count - 1) To 0 Step -1
  Dim ctrl As Control = groupBox.Controls(i)
  groupBox.Controls.Remove(ctrl)
  ctrl.Dispose()
Next i

0
投票

您只需在设计中选择组框内容并将其从gb移开,然后您可以安全地删除它并根据需要移回内容。

© www.soinside.com 2019 - 2024. All rights reserved.