Как покрасить различные элементы ComboBox? - PullRequest
0 голосов
/ 24 марта 2019

Насколько мне было сказано и когда я читал об этом, ComboBox со свойством DropDownStyle, установленным в DropDownList, представляет собой комбинацию:

TextBox , который не показываеткурсор и показывает элементы только тогда, когда пользователь нажимает кнопки ВВЕРХ, ВНИЗ или клавиши, эквивалентные элементам в списке.Например, если в DropDownList есть элемент с именем INPUT и элемент с именем OUTPUT, при нажатии клавиши I в поле со списком будет отображаться INPUT, а при нажатии клавиши O будет отображаться OUTPUT;

A Button показывает DropDownList;

DropDownList , который выпадает только тогда, когда пользователь нажимает кнопку.

Предполагая, что вышеприведенное верно, позвольте мне упомянуть, что япопробовал до сих пор.Я искал способы манипулирования тремя элементами, которые я упомянул выше, и нашел некоторые ответы, к сожалению, большинство из них были связаны с ASP.NET и C # .NET.

Я успешно установил BackColor и ForeColor обоихсостояние по умолчанию и выбранное состояние элементов в DropDownList.

Я пытался нарисовать прямоугольник над границей элемента TextBox и элемента DropDownList этого ComboBox, но эти прямоугольники остаются ниже фактических границ.

Private Sub cmbType_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cmbType.DrawItem

    Dim itemBackColorDefault As Brush, itemForeColorDefault As Brush
    Dim itemBackColorSelected As Brush, itemForeColorSelected As Brush

    itemBackColorDefault = Brushes.DarkGray
    itemForeColorDefault = Brushes.WhiteSmoke
    itemBackColorSelected = Brushes.WhiteSmoke
    itemForeColorSelected = Brushes.DarkGray

    Dim myPen As Pen
    Dim myGraphics As Graphics = Me.CreateGraphics

    myPen = New Pen(Drawing.Color.Red, 1)
    myGraphics.DrawRectangle(myPen, 133, 25, 130, 20) 'Supposed to draw a red rectangle above the border of the element TextBox of cmbType, but it stays beneath it
    e.Graphics.DrawRectangle(myPen, -1, -1, 130, 31) 'Supposed to draw a red rectangle above the border of the element DropDownList of cmbType when the element Button of cmbType is clicked, but, again, it stays beneath it

    If e.Index < 0 Then Exit Sub

    Dim rct As Rectangle = e.Bounds
    Dim itemText As String = cmbType.Items(e.Index)

    If e.State And DrawItemState.Selected Then

        'Selected BackColor
        e.Graphics.FillRectangle(itemBackColorSelected, rct)

        'Selected ForeColor
        e.Graphics.DrawString(itemText, Me.cmbType.Font, itemForeColorSelected, rct.X, rct.Y)

    Else

        'Default BackColor
        e.Graphics.FillRectangle(itemBackColorDefault, rct)

        'Default ForeColor
        e.Graphics.DrawString(itemText, Me.cmbType.Font, itemForeColorDefault, rct.X, rct.Y)

    End If

End Sub

Ожидаемый результат и фактический результат можно суммировать на одном изображении:

ВЛЕВО - фактический результат, ВПРАВО - ожидаемый результат.

Чтобы быть более точным, я хочу изменить следующее:

TextBox : цвет границы;

Button : цвет границы и BackColor,цвет и форма стрелки;

DropDownList : цвет границы (состояние по умолчанию и выбранное состояние).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...