VB.net VS2015更改整个项目的字体

时间:2016-05-29 05:58:26

标签: vb.net fonts visual-studio-2015 controls

是否有一种简单/快捷的方法来更改VB.net应用程序中所有控件的字体? (目前使用VB 2015)

我指的是所有文本框,按钮等。它应该独立于系统 默认字体。

在整个项目中更改每个控件(30-40个表单+)将非常耗费人力。

1 个答案:

答案 0 :(得分:0)

vb.net自定义字体

即使我猜不建议更改默认字体系列;有时需要它,特别是对于可访问性,定制和个性化。这也可以为一些其他应用程序中的最终用户提供良好的功能。

  

感谢许多帖子和答案并将它们结合起来;你可以尝试   在运行时更改整个项目的字体系列。

  • 这是在VS 2017 CE,VB.Net 4.6.1中测试的;无法确定VS 2015。
  • 此答案还包括应用google字体而不将其安装到最终用户的操作系统

将自定义字体添加到VB.NET和Winforms的步骤:

  1. 从Google字体中获取字体(以TTF格式下载)。
  2. 将字体添加到解决方案中。
  3. 引用新的自定义字体并将其作为对象加载。
  4. 引用表单中的所有控件。
  5. 检查控件是否接受/需要字体自定义。
  6. 应用新的字体系列。
  7. 运行并测试。
  8. 
    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
    

    我无法确定这是最佳代码还是最佳方法,但它完成了这项工作,并希望能够进行一些合作。

    我知道这是一个古老的约会问题,但希望这个答案有所帮助,以及它非常有趣的问题。