none
Vb. Net 2010 ComboBox Hintergrundfarbe ändern RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte die Hintergrundfarbe einer Combobox ändern, sodass diese Farbe im aufgeklappten, sowie im zugeklappten Zustand angenommen wird. Ich habe folgende gemacht.

    Im Form Load habe ich die DrawMode-Eigenschaft wie folgt angepasst:

    Me.CmbBx.DrawMode = DrawMode.OwnerDrawFixed

    Dann habe ich die DrawItem-Eigenschaft der Combobox wie folgt angepasst:

    Private Sub CmbBx_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles CmbBx.DrawItem
        Dim CmB As ComboBox = CType(sender, ComboBox)
        Dim index As Integer = If(e.Index >= 0, e.Index, 0)
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
        e.DrawBackground()
        e.Graphics.FillRectangle(CType(New SolidBrush(e.BackColor), Brush), e.Bounds)
        e.Graphics.DrawString(CmBBx.Items(index).ToString(), e.Font, CType(Brushes.Black, Brush), e.Bounds, StringFormat.GenericDefault)
        e.DrawFocusRectangle()
      End Sub

    Somit wird die vorher eingestellt BackColor-Farbe übernommen. Das klappt auch sehr gut. Aber ein Problem habe ich noch.

    Sobald ich ein Item der Combobox ausgewählt habe und wieder zugekappt ist, bleibt die Farbe auf Blau solange ich diese nicht verlasse ( also den Focus auf ein anderes Control setzte )

    Hat jemand eine Idee, wie ich es hinbekomme, dass die Farbe im "markierten Modus" ebenfalls diese Fareb übernimmt?

    Schon mal vielen Dank für eure Hilfe

    Donnerstag, 5. Mai 2022 10:28

Antworten

Alle Antworten

  • OK. Das funktioniert jetzt mit folgendem Code:

     Dim CmBBx As ComboBox = CType(sender, ComboBox)
        Dim index As Integer = If(e.Index >= 0, e.Index, 0)
        Dim MyBrush As Brush = (CType(New SolidBrush(CmBBx.BackColor), Brush))
    
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.ClearTypeGridFit
        e.DrawBackground()
        If ((e.State And DrawItemState.ComboBoxEdit) = DrawItemState.ComboBoxEdit) AndAlso ((e.State And DrawItemState.Focus) = DrawItemState.Focus) Then 'Item markiret
          e.Graphics.FillRectangle(MyBrush, e.Bounds)
        ElseIf ((e.State And DrawItemState.ComboBoxEdit) = DrawItemState.ComboBoxEdit) And Not ((e.State And DrawItemState.Focus) = DrawItemState.Focus) Then 'kein Focus auf der ComboBox
          e.Graphics.FillRectangle(MyBrush, e.Bounds)
        Else 'Aufgeklappt
          e.Graphics.FillRectangle(MyBrush, e.Bounds)
        End If
        e.Graphics.DrawString(CmBBx.Items(index).ToString(), e.Font, CType(Brushes.Black, Brush), e.Bounds, StringFormat.GenericDefault)
        e.DrawFocusRectangle()

    Jetzt möchte noch, während ich mit der Mouse drüber fahre, eine andere Farbe einstellen. Sonst aber so verfahren wie oben. Hat hierzu jemand eine Idee?

    Donnerstag, 5. Mai 2022 11:46
  • Hallo MrEl07,

    Die ComboBox hat kein MouseOver-Ereignis, das ausgelöst werden kann, wenn die Maus darüber und entsprechend über ihre Elemente (items) bewegt wird. Eine Problemumgehung könnte darin bestehen, Unterklassen (subclasses) zu verwenden, wie im folgenden Artikel erwähnt:
    How to capture the MouseOver Event on a comboBox?

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 5. Mai 2022 19:13
    Administrator
  • OK. Das schau ich mir mal an...
    Sonntag, 8. Mai 2022 16:05
  • Hallo MrEl07,

    Mein vorheriger Beitrag bietet eine Lösung für VB6. Dieses Problem wird auch in VB.NET behandelt, wie im folgenden Thread erwähnt:
    Mouse Over Event on a Combobox
    In VB.NET kannst Du versuchen, die OnMouseEnter-Methode zu verwenden.

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.


    Dienstag, 17. Mai 2022 06:16
    Administrator