【发布时间】:2017-04-10 21:12:03
【问题描述】:
我有一个 Win Form C# 应用程序,允许用户设置标签的字体。默认字体存储在此应用的 Properties.Settings 条目中,并使用字体对话框进行选择。
在我的应用程序中,我将此字体分配给一个标签:
Label.Font = Glob.ps.evFont; // Glob.ps is the Property.Settings for this app
由于某种原因,当我尝试显示此标签时,我收到与字体的“高度”属性相关的“参数无效”异常。
我尝试过的字体是非常普通的 Windows 字体(Arial、Segoe UI 等)。如果我在标签中明确创建字体,则应用程序可以工作:
Label.Font = new Font("Arial", 12.0F, FontStyle.Bold);
有什么想法吗?
【问题讨论】:
-
documentation 阐明了这一点:“Font 属性是环境属性。环境属性是控件属性,如果未设置,则从父控件中检索。例如,默认情况下,Button 将具有与其父 Form 相同的 BackColor... 因为 Font 是不可变的(意味着您无法调整其任何属性),您只能为 Font 属性分配一个新的 Font。但是,您可以将新字体基于现有字体。"
-
你可以使用
Label.Font = new Font(Glob.ps.evFont); -
非常不健康,通常意味着您正在泄漏绘图对象。使用任务管理器,添加“GDI 对象”列。几百,上衣,是正常的。必要时使用 Dispose() 或 using 语句进行修复。
-
@stuartd 谢谢。刚试过: Label.Font =new Font(Glob.ps.evFont, FontStyle.Regular);但我遇到了同样的问题。我对“高度”属性感到困惑,在我看来像是某种像素与点测量问题
-
@HansPassant 谢谢。任务管理器显示应用程序的 71 个 GDI 对象,我不认为它超载。
标签: c# winforms exception fonts