在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'。
答案 0 :(得分:5)
您的代码会创建控件,但不会将其添加到表单中。
在您将表单添加到表单的Controls
集合(或子控件的Controls
集合)之前,控件不会添加到表单中。
由于您尚未将其添加到表单中,因此无法从表单中删除它们。如果可以的话就没有意义。
如果您不需要,请不要将它们添加到表单中。或者,更好的是,不要在第一时间创建它们。
答案 1 :(得分:2)
您无需做任何事情。
一旦对象超出范围并且未被引用,那么它将有资格进行垃圾收集,并将在某个时候处置。
但是,如果您没有首先创建不需要的控件,那将是一个更好的设计。
您为对象命名的内容与用于保存对象的变量的名称无关。
答案 2 :(得分:0)
您将无法明显删除这些控件,因为这些控件不是您的窗口的一部分。因此,只有可能的方法是将变量设置为null
field = null;
field3 = null;
希望这对你有用;
如果这些控件已经在Windows窗体中,则可以使用
Controls.Remove("NameOfTheControl");
或者只是忽略它们并继续你的工作垃圾收集器将为你完成这项工作。
答案 3 :(得分:0)
正如其他人所提到的,您首先需要将它们添加到控件集合中,然后才能从控件集合中删除它们:-)
也可以触发垃圾收集器“销毁”你的对象:garbagecollector