Font Installieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von SidezockingLP.

    Font Installieren

    Hey, habe folgendes Problem bzw Frage,
    In meinem Projekt gibt es Schriftarten/Fonts die nicht am Zielcomputer installiert sind. Mit folgenden Code wollt ich dieses Problem beheben:

    VB.NET-Quellcode

    1. Dim Überschrift As PrivateFontCollection = New PrivateFontCollection
    2. Überschrift.AddFontFile("C:\test\Fonts\x-files.ttf")
    3. FlatLabel3.Font = New Font(Überschrift.Families(0), FlatLabel3.Font.Size)


    Das ganze funktioniert grundsätzlich, ich habe in meine Form aber ein tab-control und sobald ich die Seite wechsel dann geht die Anwendung in den Haltemodus, ohne einen Fehler anzuzeigen.

    Jetzt meine Frage an euch, weiß jemand warum das bei einem Tab-control nicht geht oder gibt es gleich eine Möglichkeit den Font auf dem Computer zu Installieren, dann müsste ich nicht über 100 Labels den Font setzen.

    MFG :)
    @SidezockingLP Willst Du den Font auf dem anderen Rechner installieren, so dass er z.B. auch für Word verfügbar ist
    oder
    willst Du den Font aus einer Datei ausschließlich in Deinem Programm nutzen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    die gewünschte schriftart in die resourcen packen, dann füg deinem Projekt ein Modul hinzu (in dem Fall mit dem Namen CustomFont), und darein kommt :

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports System.Drawing.Text
    3. Module CustomFont
    4. Private _pfc As PrivateFontCollection = Nothing
    5. Public ReadOnly Property GetInstance(ByVal Size As Single, ByVal style As FontStyle) As Font
    6. Get
    7. If _pfc Is Nothing Then LoadFont()
    8. Return New Font(_pfc.Families(0), Size, style)
    9. End Get
    10. End Property
    11. Private Sub LoadFont()
    12. Try
    13. _pfc = New PrivateFontCollection
    14. Dim fontMemPointer As IntPtr = Marshal.AllocCoTaskMem(My.Resources.Ampera.Length) '<-- Hier Ampera durch den Namen deiner Font ersetzen
    15. Marshal.Copy(My.Resources.Ampera, 0, fontMemPointer, My.Resources.Ampera.Length) ' '<-- Hier auch
    16. _pfc.AddMemoryFont(fontMemPointer, My.Resources.Ampera.Length) ''<-- Und auch hier ^^
    17. Marshal.FreeCoTaskMem(fontMemPointer)
    18. Catch ex As Exception
    19. End Try
    20. End Sub
    21. End Module


    und zum aufrufen :

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Main
    2. Private Sub btnChangeFont_Click(sender As Object, e As EventArgs) Handles btnChangeFont.Click
    3. Label1.Font = CustomFont.GetInstance(12, FontStyle.Bold)
    4. Label1.UseCompatibleTextRendering = True
    5. End Sub
    6. End Class

    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    @SidezockingLP Oder einfach so:

    VB.NET-Quellcode

    1. Dim myFonts As New PrivateFontCollection
    2. Dim myFont As Font
    3. Public Sub New()
    4. InitializeComponent()
    5. Me.myFont = Me.Font ' initial setzen
    6. End Sub
    7. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    8. Dim path = "C:\Windows\Fonts\70214___.TTF" ' Pfad zu Deinem Font
    9. If Not IO.File.Exists(path) Then
    10. MessageBox.Show("Nein")
    11. Return
    12. End If
    13. Me.myFonts.AddFontFile(path)
    14. Me.myFont = New Font(myFonts.Families(0), 10)
    15. Me.PictureBox1.Invalidate()
    16. End Sub
    17. Private Sub PictureBox1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    18. Dim g = e.Graphics
    19. g.DrawString("Bla", Me.myFont, Brushes.Black, New Point(30, 100))
    20. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!