Benutzer mit den meisten Antworten
Vb. Net 2010 ComboBox Hintergrundfarbe ändern

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
Antworten
-
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.
- Bearbeitet Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 17. Mai 2022 06:18
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 20. Mai 2022 15:33
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 1. Juni 2022 05:52
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?
-
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 DragovBitte 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.
-
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.
- Bearbeitet Ivan DragovMicrosoft contingent staff, Moderator Dienstag, 17. Mai 2022 06:18
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 20. Mai 2022 15:33
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 1. Juni 2022 05:52