如何处理自定义控件中的字体处理?

时间:2019-03-13 08:40:16

标签: c# winforms fonts gdi+

处置Fonts对我来说有点奇怪。例如,如果我有一个标签控件,并像label1.Font.Dispose();那样处理它使用的字体,它仍然可以正常绘制。

如果我改为尝试立即使用已处置的字体,则会失败,例如

var f = new Font("Arial", 14);
f.Dispose();
g.DrawString("Hello", f, Brushes.Black, 20, 20);

Invalid parameter除外。

考虑到我正在尝试使用已处置的字体,后者对我来说似乎更直观。
我不明白为什么标签仍然可以绘制得很好,因为在标签的reference source中,我看到字体是立即使用而没有任何检查:e.Graphics.DrawString(Text, Font, brush, face, stringFormat);

问题的背景是,我有一个自定义控件,与其他控件一样,该控件使用字体作为属性并实现IDisposable。我现在想知道是否应该处理字体属性,因为我不知道是否将font属性设置为仍需要的字体。

Control似乎在内部使用了一些FontHandleWrapper类,实在我不太理解。 但是,即使我从外部将字体放置在自定义控件(外部库中有此字体)中,它仍然可以正常显示,并且我可以立即在其中使用这些字体。

有人可以解释为什么我可以处置一种字体而不能处置另一种字体吗? 我应该将字体留在自定义控件的Dispose方法中还是进行处理?

0 个答案:

没有答案