Изменение цветов раскрывающегося списка ComboBox с SuggestAppend

  • VS 2013, версия 12, обновление 5
  • Приложение VB.net для Windows Form

У меня есть форма с элементом управления ComboBox, чей DataSource является DataTable. Я хочу раскрасить фон выпадающих элементов на основе поля в источнике данных. Я заполняю DataTable и настраиваю ComboBox DataSource программно во время выполнения.

Прямо сейчас я могу раскрасить варианты выбора следующим кодом, который запускается в событии DrawItem ComboBox.

 Private Sub DrawGridComboBoxItem(sender As Object, e As DrawItemEventArgs) Handles cboLocationID.DrawItem
        If e.Index <> -1 Then

            e.DrawBackground()

            Dim cb As ComboBox = TryCast(sender, ComboBox)
            Dim dt As DataTable = TryCast(cb.DataSource, DataTable)

            If (e.State And DrawItemState.Focus) <> DrawItemState.Focus AndAlso cb.DroppedDown Then
                If dt.Rows(e.Index).Item("locationStatus") = 1 Then
                    e.Graphics.FillRectangle(Brushes.Red, e.Bounds)
                ElseIf dt.Rows(e.Index).Item("locationStatus") = 2 Then
                    e.Graphics.FillRectangle(Brushes.Gainsboro, e.Bounds)
                Else
                    e.Graphics.FillRectangle(Brushes.White, e.Bounds)
                End If
            End If

            e.Graphics.DrawString(dt.Rows(e.Index).Item("locationName"), e.Font, Brushes.Black, e.Bounds)

            e.DrawFocusRectangle()
        End If
    End Sub

Это прекрасно работает, когда я нажимаю стрелку раскрывающегося списка в ComboBox, чтобы увидеть элементы списка. У большинства есть белый фон. Некоторые имеют сероватый (Gainsboro) фон. У некоторых есть красный фон.

Проблема возникает, когда я набираю в ComboBox вместо того, чтобы щелкать и выбирать из списка. Упреждающий ввод работает нормально, и правильные варианты фильтруются и отображаются по мере ввода текста, но ни у одного из них не задан цвет фона, кроме белого.

Событие DrawItem даже не вызывается при вводе в ComboBox. Есть ли еще одно событие, к которому я мог бы подключиться?

ComboBox имеет следующие свойства:

  • AutoCompleteMode: SuggestAppend
  • AutoCompleteSource: ListItems
  • DrawMode: OwnerDrawVariable
  • FlatStyle: квартира

0 ответов

Другие вопросы по тегам