Fontize对象在InitializeComponent中处理

时间:2014-04-25 11:49:29

标签: c# winforms dispose

所有

我在设计winform时注意到一件事。我在其中一个标签上应用了font属性,并在form.designer.cs InitializeComponent() .net生成的代码中看到了附加:

this.Lable1.Font=new Font("Arial", 20, .........)

现在,在控件退出Font后,这个新的InitializeComponent对象不会被释放。如果我的表单上有20个不同的对象,我将至少有20个不同的未处理的Font对象。

作为补救措施,我尝试在InitializeComponent()

中添加以下行
Font font1=new Font("Arial",20,"".......)
Lable1.Font=font1;
font1.dispose();

我错过了什么吗?或者这是.net如何处理字体并可能留下Font对象。

2 个答案:

答案 0 :(得分:2)

如果您立即处置资源,您将无法在表格的剩余生命周期内使用该资源。

Font实例化时Form被实例化。当您关闭Form时,Font实例(以及InitializeComponent()方法中创建的任何其他内容)将超出范围并被处理掉。

保留Designer.cs文件中的所有内容。在InitializeComponent()方法之上甚至还有以下评论:

  

请勿使用代码编辑器修改此方法的内容。

当您在设计时开始对表单进行其他更改时,您对其所做的任何自定义编辑都可能会被覆盖。它通常不是您需要或想要触摸的文件。

答案 1 :(得分:1)

框架会在处置父对象时自动处理它们(所以ControlForm)。

当父控件关闭时,它会自动调用Dispose方法,它会逐渐消失。

此外,在InitializeComponents中处理字体是一个坏主意。在类级别创建变量并在Dispose方法中进行处置。但如上所述,我认为你不需要这个。