是否有一种简单/快捷的方法来更改VB.net应用程序中所有控件的字体? (目前使用VB 2015)
我指的是所有文本框,按钮等。它应该独立于系统 默认字体。
在整个项目中更改每个控件(30-40个表单+)将非常耗费人力。
答案 0 :(得分:0)
即使我猜不建议更改默认字体系列;有时需要它,特别是对于可访问性,定制和个性化。这也可以为一些其他应用程序中的最终用户提供良好的功能。
感谢许多帖子和答案并将它们结合起来;你可以尝试 在运行时更改整个项目的字体系列。
将自定义字体添加到VB.NET和Winforms的步骤:
Imports System.Drawing.Text
Public Class Form1
Dim pfc As New PrivateFontCollection()
Private Function FindALLControlRecursive(ByVal list As List(Of Control), ByVal parent As Control) As List(Of Control)
' function that returns all control in a form, parent or child regardless of control's type
If parent Is Nothing Then
Return list
Else
list.Add(parent)
End If
For Each child As Control In parent.Controls
FindALLControlRecursive(list, child)
Next
Return list
End Functio
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
' On Form1 shown, start applying font
Dim CFontPath As String = Application.StartupPath
pfc.AddFontFile(CFontPath & "\Resources\Fonts\Roboto.ttf")
Dim allCtrl As New List(Of Control)
For Each ctrl As Control In FindALLControlRecursive(allCtrl, Me)
' You need to define which control type to change it's font family; not recommendd to just change all controls' fonts, it will create a missy shape
If TypeOf ctrl Is Label Or TypeOf ctrl Is TextBox Or TypeOf ctrl Is Button Or TypeOf ctrl Is CheckBox Or TypeOf ctrl Is RadioButton Or TypeOf ctrl Is ProgressBar Or TypeOf ctrl Is GroupBox Or TypeOf ctrl Is Chart Then
Dim CurrentCtrlFontSize = ctrl.Font.Size ' get current object's font size before applying new font family
ctrl.Font = New Font(pfc.Families(0), CurrentCtrlFontSize, FontStyle.Regular)
End If
Next
allCtrl.Clear()
End Sub
End Class
我无法确定这是最佳代码还是最佳方法,但它完成了这项工作,并希望能够进行一些合作。
我知道这是一个古老的约会问题,但希望这个答案有所帮助,以及它非常有趣的问题。