Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体中的字体继承_C#_.net_Winforms - Fatal编程技术网

C# Windows窗体中的字体继承

C# Windows窗体中的字体继承,c#,.net,winforms,C#,.net,Winforms,这可能是一个愚蠢的问题,答案很琐碎,但我在这里画了一个空白,希望能得到一些帮助 假设Windows窗体应用程序中有两个窗体:主窗口和子窗口,它们将显示为第一个窗体的对话框。主窗口包含一组控件,包括菜单条和工具栏 如何确保两种表单中的所有控件都使用相同的、用户可配置的字体?通过使用VS designer快速测试,我将主窗体的Font属性设置为默认值以外的其他值,并确保该窗体中的所有控件都设置为默认值。这样做会导致一些控件相应地调整,但菜单条和工具栏的字体保持不变/默认。这是通过这些控件设计的,还是

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

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

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

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

再说一次,我想说清楚。在我的代码中只有一个地方设置了Font属性,它位于主窗体上。我没有问题,因为控件/窗体是显式设置的


提前谢谢你的帮助

为什么不让字体成为任何派生表单的构造函数中的参数


生成表单时,它们会从父表单传入字体,所有字体都设置在主表单中。

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


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

这不是完全的继承,该功能称为“环境属性”。如果尚未在设计器(显示在粗体中)或代码中指定字体属性,则控件将使用其父控件的字体属性。这是非常方便的,它允许一个非常一致的外观和感觉,并有助于获得布局一致的机器上运行不同的视频点每英寸设置。其他环境光属性包括背景色、前景色、光标、右至左。如果父对象发生更改或父对象更改其属性值,则可以通过管道确保此操作仍然有效

随之而来的是,当不再有父母时,责任就停止了。对于窗体,它没有父级。因此,如果希望使用与在设计器中选择的值不同的值,则由您指定窗体的字体属性。易于操作:

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