我一直在这里搜索一种只更改Windows窗体应用程序中所有控件的FontFamily的方法。请注意,我不想更改它们的字体大小。
情况如下:为了促进跨Windows兼容性,然而,创建良好的用户界面,Vista之前的计算机中的FontFamily将具有一种字体(Tahoma),较新版本将与来自Google的Open Sans一起使用(Open Sans字体将随项目一起分发。)
我已成功使用 Environment.OSVersion 属性更改旧版Windows中的字体,并在Form1上创建应用程序设置(UserFont)。像这样:
private void Form1_Load(object sender, EventArgs e)
{
if (Environment.OSVersion.Version.Major == 5)
{
Properties.Settings.Default.UserFont = new Font("Tahoma", 12);
}
else if (Environment.OSVersion.Version.Major >= 6)
{
Properties.Settings.Default.UserFont = new Font("Open Sans", 12);
}
}
因此,当表单加载时,它会将所有子控件更改为Tahoma或Open Sans,但它也会将字体大小更改为12.这导致了我的问题:
如何只更改表单中所有控件的FontFamily,保持其大小和样式?
P.S。:我想为我将使用的所有字体大小创建几个应用程序设置,但我真的想要一个更简单的解决方案。
谢谢:)
答案 0 :(得分:0)
我有同样的问题,我所做的就像这样简单,有几个代码行:
Open Sans
设置为主窗体/窗口的初始字体
(另外,您应该设置所有子控件以继承其父项的字体。)在代码中,首先检查操作系统版本:
if (!IsWinVistaOrHigher) {
this.Font = new Font("Tahoma", 12);
}
并且所有孩子都将被自动继承。如果false
,则Open Sans
被加载,好像什么也没发生过一样。
如果只有几个控件需要修改字体,下面的示例代码可以保留原始字体大小:
label1.Font = new Font("Tahoma", label1.Font.Size);
label2.Font = new Font("Tahoma", label2.Font.Size);
如果要更改许多字体大小,只需循环控制并设置字体即可。这里的关键是使用controlName.Font.Size
,您可以按controlName.Font.Size - 1
为了进一步挖掘,下面的代码可能会帮助您获得更多想法:
考虑你放弃Panel / TableLayoutPanel / FlowLayoutPanel中的所有控件,然后循环可能是这样的:
foreach (Control c in FlowLayoutPanel1.Controls) {
if (c.Controls != null) {
c.Font = new Font("Tahoma", c.Font.Size)
}
}
通常,循环过程可以提供帮助:
public void SetAllControlsFont(ControlCollection ctrls) {
foreach(Control c in ctrls) {
if(c.Controls != null) {
SetAllControlsFont(c.Controls);
}
c.Font = new Font("Tahoma", c.Font.Size);
}
}
然后通过Form1_Load()
SetAllControlsFont(this.Controls);
事件中调用它
请注意,代码可能不适用于缺少转换/强制转换类型,但我希望您有一般的想法。只需在这里发表评论,我就会回来。