C#删除尚未添加的控件

本文关键字:控件 添加 删除 | 更新日期: 2023-09-27 18:00:18

在C#Windows窗体中,我正在创建一些动态控件:

TextBox field = new TextBox();
DateTimePicker field2 = new DateTimePicker();
CheckBox field3 = new CheckBox();

基于在此之后运行的一些if语句,我需要删除3个控件中的2个,甚至在它们被添加到表单之前。如果我尝试这个

Controls.Remove(field);
Controls.Remove(field3);

它不起作用,大概是因为他们还没有真正控制。那么,我还能怎样摧毁它们呢?我需要删除它们的原因是,在上面的情况下,我没有删除field2,因为我需要保留DateTimePicker,我将把它重命名为"field"。

C#删除尚未添加的控件

您的代码创建控件,但不将它们添加到表单中。

在将控件添加到窗体的Controls集合(或子控件的Controls集合)之前,控件不会添加到窗体中。

由于您还没有将它们添加到表单中,因此无法将它们从表单中删除。如果可以的话,这将毫无意义。

如果你不需要它们,就不要把它们添加到表单中。或者,更好的是,一开始就不要创造它们。

您不需要做任何事情。

一旦对象超出范围并且没有被引用,那么它将有资格进行垃圾收集,并将在某个时刻被处理。

然而,如果你一开始就不创建你不需要的控件,这将是一个更好的设计。

你给对象命名的名称与你用来保存对它的引用的变量的名称无关。

您将无法明显删除这些控件,因为这些控件不是您的窗口的一部分。因此,唯一可能的方法是将变量设置为空

field  = null;
field3 = null; 

希望这对你有用;

如果这些控件已经在windows窗体中,则可以使用

 Controls.Remove("NameOfTheControl");

或者忽略它们,继续你的工作垃圾收集器会为你做这项工作。

正如其他人所说,在从controll集合中删除它们之前,您首先需要将它们添加到controll集合:-)

还可以触发garbagecollector来"销毁"您的对象:garbagecollector