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"。
您的代码创建控件,但不将它们添加到表单中。
在将控件添加到窗体的Controls
集合(或子控件的Controls
集合)之前,控件不会添加到窗体中。
由于您还没有将它们添加到表单中,因此无法将它们从表单中删除。如果可以的话,这将毫无意义。
如果你不需要它们,就不要把它们添加到表单中。或者,更好的是,一开始就不要创造它们。
您不需要做任何事情。
一旦对象超出范围并且没有被引用,那么它将有资格进行垃圾收集,并将在某个时刻被处理。
然而,如果你一开始就不创建你不需要的控件,这将是一个更好的设计。
你给对象命名的名称与你用来保存对它的引用的变量的名称无关。
您将无法明显删除这些控件,因为这些控件不是您的窗口的一部分。因此,唯一可能的方法是将变量设置为空
field = null;
field3 = null;
希望这对你有用;
如果这些控件已经在windows窗体中,则可以使用
Controls.Remove("NameOfTheControl");
或者忽略它们,继续你的工作垃圾收集器会为你做这项工作。
正如其他人所说,在从controll集合中删除它们之前,您首先需要将它们添加到controll集合:-)
还可以触发garbagecollector来"销毁"您的对象:garbagecollector