【问题标题】:Font Inheritance in Windows FormsWindows 窗体中的字体继承
【发布时间】:2011-07-02 02:28:26
【问题描述】:

这可能是一个愚蠢的问题,答案很简单,但我在这里画了一个空白,希望得到一些帮助。

假设我在一个 Windows 窗体应用程序中有两个窗体:主窗口和一个将显示为第一个对话框的子窗口。主窗口包含一组控件,包括菜单条和工具栏。

如何确保两种表单中的所有控件都使用相同的用户可配置字体?使用 VS 设计器快速测试这一点,我将主窗体的 Font 属性设置为默认值以外的其他值,并确保该窗体中的所有控件都设置为默认值。这样做会导致一些控件相应地调整,但菜单条和工具栏的字体保持不变/默认。这是通过这些控件设计的,还是我遗漏了一些明显的东西?

至于第二个表单,我将这个表单显示为主表单的子对话框。除非我明确设置子表单的字体,否则它无法使用与主表单相同的字体显示(尽管配置了默认字体)。设置对话框窗口的字体以匹配父级是正确的方法还是我错过了什么?

再一次,为了清楚起见。在我的代码中只有一个地方设置了 Font 属性并且它位于主窗体上。我没有遇到问题,因为控件/表单是明确设置的。

提前感谢您的帮助!

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    这不完全是继承,这个特性被称为“环境属性”。如果在设计器(显示为粗体)或代码中未分配 Font 属性,则控件将使用其父级的 Font 属性。这非常方便,它允许非常一致的外观和感觉,并有助于在以不同视频每英寸点数设置运行的机器上获得一致的布局。其他环境属性是 BackColor、ForeColor、Cursor、RightToLeft。如果父项更改或父项更改其属性值,则可以确保这仍然有效。

    随之而来的是,当不再有 Parent 时,责任就停止了。这发生在表单上,​​它没有父级。因此,如果您想使用与您在设计器中选择的值不同的值,则由您来分配 Form 的 Font 属性。容易做到:

    var frm = new Form2();
    frm.Font = this.Font;
    frm.Show();
    

    ToolStrip 和 MenuStrip 类的行为略有不同。除非明确指定,否则它们会从系统设置中初始化其字体。用户可以在控制面板的显示小程序中选择她喜欢的字体和磅值(Windows 7 中的个性化)。覆盖此选择当然是可能的,但您通常不应该这样做并尊重用户的偏好。控制面板对话框如下所示:

    【讨论】:

      【解决方案2】:

      正如 Neil 所说,您可以将 Font 作为所有子窗体的参数传递。

      但是,您也可以拥有一个包含字体的静态类,并且您的所有表单都可以从中获取好的字体并将其应用于自身。这可以在主窗体中设置并从所有其他窗体中读取。

      【讨论】:

        【解决方案3】:

        为什么不在任何衍生形式的构造函数中将 Font 作为参数?

        当生成表单时,它们会从父表单中获取字体,所有这些都设置在主表单中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-24
          • 2016-11-02
          • 2021-04-12
          • 1970-01-01
          相关资源
          最近更新 更多