Я создал пользовательский комбинированный список с ярлыком, чтобы закрыть комбинированный список (поскольку он очень уродливый), когда он не используется. На этикетке с крышкой должен отображаться элемент дисплея. Накладные и открывающие вилки прекрасно работают, однако текст на отображаемой метке является предыдущим значением, а не текущим. Проходя над меткой с помощью мыши, запускает событие ввода метки с помощью мыши, и тогда значение на дисплее является правильным Вот код для пользовательского элемента управления.
Public Class ComboBoxWithALid
Inherits ComboBox
Private WithEvents Lid As New Label With {.BackColor = Color.LightCyan, .ForeColor = Color.Black,
.TextAlign = ContentAlignment.MiddleCenter}
Protected Overrides Sub OnDataSourceChanged(ByVal e As EventArgs)
MyBase.OnDataSourceChanged(e)
Lid.Location = Location
Lid.Size = Size
Parent.Controls.Add(Lid)
Lid.BringToFront()
End Sub
Private Sub Lid_MouseEnter(sender As Object, e As EventArgs) Handles Lid.MouseEnter
Lid.SendToBack()
End Sub
Protected Overrides Sub OnMouseLeave(e As EventArgs)
MyBase.OnMouseLeave(e)se
Lid.Text = SelectedText
Lid.BringToFront()
End Sub
Protected Overrides Sub OnDropDownClosed(e As EventArgs)
MyBase.OnDropDownClosed(e)
Lid.BringToFront()
Lid.Text = SelectedText
End Sub
End Class
Чтобы проверить элемент управления, перетащите элемент управления из ящика с инструментами в форму и привяжите элемент управления к любой таблице, которую вы используете
Я пытался использовать текст вместо выделенного текста - те же результаты
Я нашел решение. Измените оператор перемещения на:
Lid.Text = Items(SelectedIndex)(DisplayMember)
и он работает.