Combobox Fore Color

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von SystemUnknow.

    Combobox Fore Color

    Hallo,
    Wie kann man in einer Combobox bestimmte Wörter Färben?
    Ich habe es schon mit einer Selection versucht und diese zu färben, aber das färben der Selection wird in der Combobox nicht unterstützt.

    VB.NET-Quellcode

    1. cmb_url.SelectionStart = 0
    2. cmb_url.SelectionLength = 8
    3. cmb_url.SelectionColor = Color.Green 'SelectionColor ist kein Member von...

    Gibt es da noch eine Möglichkeit?
    Offensichtlich kann eien ComboBox nur ForeColor und BackColor.
    Du kannst Dir natürlich ein solches Control selber schreiben, aber dazu fehlen Dir wohl noch ein paar Wochen Stunden Übung.
    Undf wenn Du es kannst, brauchst Du es nicht mehr. :S
    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!
    Hi, also das maximale (von dem ich weiß) und was man aus der Combobox rausholen kann ist folgendes:



    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class MyComboBox
    2. Inherits ComboBox
    3. Public Sub New()
    4. Me.DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed
    5. DoubleBuffered = True
    6. Me.DropDownStyle = ComboBoxStyle.DropDownList
    7. End Sub
    8. Private Sub Me_DrawItem(sender As Object, e As System.Windows.Forms.DrawItemEventArgs) Handles Me.DrawItem
    9. With e.Graphics
    10. .PixelOffsetMode = Drawing2D.PixelOffsetMode.Half
    11. .TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
    12. Dim c As Integer = Items.Count
    13. If e.Index <> -1 Then
    14. Dim aktItem As Object = Items(e.Index)
    15. If aktItem IsNot Nothing Then
    16. 'Hintergrund/Selection
    17. .SetClip(e.Bounds)
    18. .Clear(BackColor)
    19. If isDrop Then
    20. e.DrawFocusRectangle()
    21. e.DrawBackground()
    22. Else
    23. ''Textbox "verändern"
    24. 'Dim brsh As New Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(100, 50), Color.Gray, Color.WhiteSmoke)
    25. '.FillRectangle(brsh, e.Bounds)
    26. End If
    27. 'Das Item zeichnen
    28. If aktItem.GetType.GetInterfaces.Contains(GetType(IComboItem)) Then
    29. 'Wenn es ein iComboItem ist
    30. Dim tmp As IComboItem = DirectCast(aktItem, IComboItem)
    31. .DrawString(tmp.ToString, Font, New SolidBrush(tmp.Color), e.Bounds.Left, e.Bounds.Top)
    32. Else
    33. 'Wenn es kein iComboItem ist
    34. .DrawString(aktItem.ToString, Font, New SolidBrush(Me.ForeColor), e.Bounds.Left, e.Bounds.Top)
    35. End If
    36. End If
    37. End If
    38. End With
    39. End Sub
    40. Dim isDrop As Boolean = False
    41. Private Sub MyCombo_DropDown(sender As Object, e As System.EventArgs) Handles Me.DropDown
    42. isDrop = True
    43. End Sub
    44. Private Sub MyCombo_DropDownClosed(sender As Object, e As System.EventArgs) Handles Me.DropDownClosed
    45. isDrop = False
    46. Invalidate()
    47. End Sub
    48. Private Sub MyCombo_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles Me.SelectedIndexChanged
    49. Invalidate()
    50. End Sub
    51. End Class
    52. Public Interface IComboItem
    53. Property Color As Color
    54. 'Property Font, etc
    55. End Interface


    Die Benutzung dürfte dir etwas kompliziert erscheinen, da du vllt noch nicht "richtig" mit Klassen gearbeitet hast - mit eigenen schon garnicht. Darum davon nur ein Screenshot und kein C&P Code. Eine Liste von Objekten die das IComboItem-Interface implementieren können in der umgebauten ComboBox in verschiedenen Farben dargestellt werden - soll heißen, du brauchst eine eigene Klasse die den Datensatz/Item repräsentiert.



    @ErfinderDesRades
    Wie du schon sagtest, kann man das Textfeld (also die ComboBox ohne das DropDownAnhängsel) nur schwer selbst zeichnen - bei mir wird es wie die Items gezeichnet. Umgehen kann man das nur bedingt: Die Variable isDrop gibt auskunft ob das DropDownDings angezeigt wird - anhand dieses Wissens könnte man die Items und damit die Textbox der Combobox gesondert zeichnen. Würde zb so aussehen:



    Der Pfeil ist eine ganz andere Baustelle - auf msdn gibts ein Beispiel dazu, einfach mal den comboboxrenderer anschauen 8| (kompliziert und hässlich sieht es aus)

    lg