【问题标题】:How do I change the fontstyle to bold on a font I already created as regular如何将我已经创建为常规字体的字体样式更改为粗体
【发布时间】:2017-11-07 01:35:54
【问题描述】:

我允许在我的应用程序中使用主题。所以我根据用户选择的主题创建了一个字体。但是,我需要将字体样式从常规更改为粗体,但我不想重新创建字体。

我这样做是因为并非所有用户都会在他们的机器上安装该字体。所以我将字体嵌入到应用程序中。

例如:我可能有一个文本框分配了这样的字体:

txtbox.font = theme_font

有没有办法简单地将样式更改为粗体?

txtbox.font = theme_font.fontstyle.bold ' <-- this doesn't work

我这样调用字体创建子程序:

Public Shared theme_font = BerlinSans.GetInstance(theme_font_size, FontStyle.Regular)

这是被调用的子程序:

Module BerlinSans

   'PRIVATE FONT COLLECTION TO HOLD THE DYNAMIC FONT
    Private _pfc As PrivateFontCollection = Nothing

  Public ReadOnly Property GetInstance(ByVal Size As Single, ByVal style As FontStyle) As Font

        Get
            'IF THIS IS THE FIRST TIME GETTING AN INSTANCE
            'LOAD THE FONT FROM RESOURCES
            If _pfc Is Nothing Then LoadFont()

            'RETURN A NEW FONT OBJECT BASED ON THE SIZE AND STYLE PASSED IN
            Return New Font(_pfc.Families(0), Size, style)

        End Get

  End Property

  Private Sub LoadFont()

        Try
            'INIT THE FONT COLLECTION
            _pfc = New PrivateFontCollection

            'LOAD MEMORY POINTER FOR FONT RESOURCE
            Dim fontMemPointer As IntPtr = Marshal.AllocCoTaskMem(My.Resources.BRLNSR.Length)

            'COPY THE DATA TO THE MEMORY LOCATION
            Marshal.Copy(My.Resources.BRLNSR, 0, fontMemPointer, My.Resources.BRLNSR.Length)

            'LOAD THE MEMORY FONT INTO THE PRIVATE FONT COLLECTION
            _pfc.AddMemoryFont(fontMemPointer, My.Resources.BRLNSR.Length)

            'FREE UNSAFE MEMORY
            Marshal.FreeCoTaskMem(fontMemPointer)

        Catch ex As Exception
            'ERROR LOADING FONT. HANDLE EXCEPTION HERE
        End Try

    End Sub


End Module

【问题讨论】:

    标签: vb.net fonts


    【解决方案1】:

    您可以使用Font(Font, FontStyle) constructor。只需将旧字体和您要使用的新样式传递给它,它就会为您将旧字体中的属性复制到新字体中(当然,除了样式)。

    txtbox.Font = New Font(theme_font, FontStyle.Bold)
    

    【讨论】:

    • 谢谢。我试过了,它说:重载解析失败,因为没有缩小转换就无法调用可访问的“新”:
    • @user2721815 :必须有更多信息吗?因为这不足以让我说出问题所在。您在代码中到底写了什么?还是你只是复制粘贴我的?
    • @user2721815 :我想我知道问题出在哪里了。我不确定,但有可能:尝试使用特定类型声明 theme_font 而不是推断它。可能是编译器不完全知道它是什么类型,因此不确定要选择哪个重载。尝试将变量指定为 Font 并查看是否有效:Public Shared theme_font As Font = BerlinSans.GetInstance(theme_font_size, FontStyle.Regular)
    • @user2721815 : 运气好吗?如果您仍然遇到问题,请向我发送 (a) 屏幕截图,其中包含与错误相关的尽可能多的信息,我会看看这是否有助于我确定导致错误的原因。
    • 感谢文森特,您将主题字体声明为类型的建议奏效了。所以新行看起来像:Public Shared theme_font As Font = Arial.GetInstance(theme_font_size, FontStyle.Regular)。现在我可以使用 .Font = New Font(theme_font, FontStyle.Bold) 而不会出错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多