【问题标题】:C# Win Forms app standard font throws exception ("Height" property)C# Win Forms 应用程序标准字体抛出异常(“高度”属性)
【发布时间】: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


【解决方案1】:

是否可以正确读取设置?
创建了一个空的 winform 项目来测试通过应用程序设置设置字体,最后得到了这样的代码,它工作正常。
设置断点,应用字体后看到标签高度属性变化(增加)。

    namespace WinForm
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

                // Apply font from the properties settings
                fontLabel.Font = WinForm.Properties.Settings.Default.evFont;
            }
        }
    }

【讨论】:

  • 在这样的示例中对我有用。我将字体设置为“Arial,Bold,9 pts”并将其分配给一个简单的标签。在断点中,高度报告为 18(我假设它转换为像素),大小为 9.0(以磅为单位的原始大小)。
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多