Combobox mit Fonts - OnDraw wenn item ausgewählt ist

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Combobox mit Fonts - OnDraw wenn item ausgewählt ist

    Hallo,

    Ich habe im Internet den Code für eine Combobox mit Fonts gefunden und diesen in ein Usercontrol abgeändert. Alles funktioniert super, nur wenn ein Element ausgewählt wurde wird nicht nur die Schriftart, sondern auch die Größe angezeigt.
    Jetzt suche ich nach einem OnDraw element für das Ausgewählte Objekt. Habt ihr einen Tipp für mich?



    VB.NET-Quellcode

    1. Public Class ATFontPicker
    2. Inherits System.Windows.Forms.ComboBox
    3. Public Sub New()
    4. Me.DrawMode = DrawMode.OwnerDrawFixed
    5. Me.Font = New Font("Microsoft Sans Serif, 11.25pt", 11.25)
    6. Me.ItemHeight = 20
    7. initFonts()
    8. End Sub
    9. Private Sub initFonts()
    10. Dim objFontFamily As FontFamily
    11. Dim objFontCollection As System.Drawing.Text.FontCollection
    12. Dim tempFont As Font
    13. objFontCollection = New System.Drawing.Text.InstalledFontCollection()
    14. For Each objFontFamily In objFontCollection.Families
    15. If objFontFamily.IsStyleAvailable(FontStyle.Regular) Then
    16. tempFont = New Font(objFontFamily, 14, FontStyle.Regular)
    17. ElseIf objFontFamily.IsStyleAvailable(FontStyle.Bold) Then
    18. tempFont = New Font(objFontFamily, 14, FontStyle.Bold)
    19. ElseIf objFontFamily.IsStyleAvailable(FontStyle.Italic) Then
    20. tempFont = New Font(objFontFamily, 14, FontStyle.Italic)
    21. Else
    22. tempFont = Nothing
    23. End If
    24. Dim lst As New ListViewItem
    25. lst.Font = tempFont
    26. lst.Text = tempFont.Name
    27. Me.Items.Add(tempFont)
    28. Next
    29. End Sub
    30. Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
    31. e.DrawBackground()
    32. If (e.State And DrawItemState.Focus) <> 0 Then
    33. e.DrawFocusRectangle()
    34. End If
    35. Dim objBrush As Brush = Nothing
    36. Try
    37. objBrush = New SolidBrush(e.ForeColor)
    38. 'objBrush = New SolidBrush(System.Drawing.Color.Cyan)
    39. Dim ofont As Font = DirectCast(Me.Items(e.Index), Font)
    40. e.Graphics.DrawString(ofont.Name, ofont, objBrush, e.Bounds)
    41. Finally
    42. If objBrush IsNot Nothing Then
    43. objBrush.Dispose()
    44. End If
    45. objBrush = Nothing
    46. End Try
    47. MyBase.OnDrawItem(e)
    48. End Sub
    49. End Class






    Schon Danke im Voraus!