Windows窗体中的字体inheritance

这可能是一个愚蠢的问题,有一个微不足道的答案,但我在这里画一个空白,并希望得到一些帮助。

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

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

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

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

感谢您的帮助!

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

接下来是当没有父母时,降压停止。 对于Form,会发生哪种情况,它没有Parent。 因此,如果要使用与您在设计器中选择的值不同的值,则可以指定Form的Font属性。 容易做到:

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

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

在此处输入图像描述

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

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

为什么不在任何衍生forms的构造函数中使Font成为参数?

当生成表单时,它们将获得从父表单传入的字体,所有字体都在主表单中设置。