如何更改Windows窗体应用程序中所有控件的FontFamily属性
本文关键字:控件 FontFamily 属性 何更改 Windows 窗体 应用程序 | 更新日期: 2023-09-27 18:27:07
我一直在这里搜索一种只更改Windows窗体应用程序中所有控件的FontFamily的方法。请注意,我不想更改它们的字体大小。
情况是这样的:为了提高跨Windows的兼容性,同时创造良好的用户界面,Vista之前的电脑中的FontFamily将有一种字体(Tahoma),新版本将与谷歌的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以保持其大小和样式?
附言:我想为我将要使用的所有字体大小创建几个应用程序设置,但我真的想要一个更简单的解决方案。
谢谢:)
我也有同样的问题,我所做的只是简单的这样,只有几行代码:
- 在设计中,将
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);
请注意,由于缺少convert/cast类型,代码可能不起作用,但我希望您已经大致了解了。只要在这里发表评论,我就会回来。