C#删除尚未添加的控件

时间:2011-06-25 20:56:32

标签: c# winforms controls

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

4 个答案:

答案 0 :(得分:5)

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

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

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

如果您不需要,请不要将它们添加到表单中。或者,更好的是,不要在第一时间创建它们。

答案 1 :(得分:2)

您无需做任何事情。

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

但是,如果您没有首先创建不需要的控件,那将是一个更好的设计。

您为对象命名的内容与用于保存对象的变量的名称无关。

答案 2 :(得分:0)

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

field  = null;
field3 = null; 
希望这对你有用;

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

 Controls.Remove("NameOfTheControl");

或者只是忽略它们并继续你的工作垃圾收集器将为你完成这项工作。

答案 3 :(得分:0)

正如其他人所提到的,您首先需要将它们添加到控件集合中,然后才能从控件集合中删除它们:-)

也可以触发垃圾收集器“销毁”你的对象:garbagecollector