Насколько мне было сказано и когда я читал об этом, 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 : цвет границы (состояние по умолчанию и выбранное состояние).