Vielleicht liegt das Problem aber ganz woanders, denn ich habe auch noch eine ComboBox mit Ownerdraw, wo auch die ungültigen Einträge Rot sind.
Das klappt auch fast immer einwandfrei, bis auf ein paar seltsame Fälle.
Wenn man mit dem Cursor über einen Eintrag ist,
so wird er Blau hinterlegt und die Beschriftung wird weiß.
Manchmal wird die Schrift aber bei allen Items nicht weiß, sonder bleibt schwarz.
Wenn ich dann das Programm beende und anschließend gleich wieder compiliere ohne auch nur zur Code-Ansicht gewechselt (und den Code geändert zu haben), geht es wieder.
Ist da vielleicht generell mit meinem Visual Studio was nicht in Ordnung?
Vielleicht habe ich aber auch einen Fehler im Code: 'alle Items sind von dem Typ:
Public Structure ComboItem
Dim Text As String
Dim ID As Integer
Dim gueltig As Boolean
End Structure
Private Sub comboFirmen_DrawItem(ByVal sender As Object, ByVal e As _
System.Windows.Forms.DrawItemEventArgs) Handles comboFirmen.DrawItem
If Me.comboFirmen.Items.Count > 0 And e.Index >= 0 Then
'Me.Text = e.State.ToString
'Hover
If e.State = DrawItemState.Selected + DrawItemState.NoFocusRect + _
DrawItemState.NoAccelerator + DrawItemState.Focus Or e.State = _
DrawItemState.Selected + DrawItemState.NoFocusRect + _
DrawItemState.NoAccelerator + DrawItemState.Focus + _
DrawItemState.ComboBoxEdit Then
Dim StrBR As SolidBrush
If Me.comboFirmen.Items(e.Index).gueltig = True Then
StrBR = New SolidBrush(Color.White)
Else
StrBR = New SolidBrush(Color.Tomato)
End If
Dim BBrush As New SolidBrush(SystemColors.ActiveCaption)
e.DrawBackground()
e.Graphics.FillRectangle(BBrush, e.Bounds)
e.Graphics.DrawString(Me.comboFirmen.Items(e.Index).text, _
comboFirmen.Font, StrBR, e.Bounds.X + 1, e.Bounds.Y + 1)
e.DrawFocusRectangle()
'Deaktiviert
ElseIf e.State = DrawItemState.ComboBoxEdit + _
DrawItemState.NoAccelerator + DrawItemState.Disabled + _
DrawItemState.NoFocusRect Then
Dim StrBR As SolidBrush
If Me.comboFirmen.Items(e.Index).gueltig = True Then
StrBR = New SolidBrush(Color.DimGray)
Else
StrBR = New SolidBrush(Color.Tomato)
End If
Dim BBrush As New SolidBrush(SystemColors.Control)
e.DrawBackground()
e.Graphics.FillRectangle(BBrush, e.Bounds)
e.Graphics.DrawString(Me.comboFirmen.Items(e.Index).text, _
comboFirmen.Font, StrBR, e.Bounds.X, e.Bounds.Y + 1)
'Nichts / Normal, ohne Hover
Else
Dim StrBR As SolidBrush
If Me.comboFirmen.Items(e.Index).gueltig = True Then
StrBR = New SolidBrush(Color.Black)
Else
StrBR = New SolidBrush(Color.Red)
End If
e.DrawBackground()
e.Graphics.DrawString(Me.comboFirmen.Items(e.Index).text, _
comboFirmen.Font, StrBR, e.Bounds.X, e.Bounds.Y + 1)
End If
End If
End Sub
Private Sub comboFirmen_MeasureItem(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MeasureItemEventArgs) Handles comboFirmen.MeasureItem
e.ItemWidth = Me.comboFirmen.Width
e.ItemHeight = Me.comboFirmen.ItemHeight
End Sub MfG Radon |