Combobox настраиваемый контроль с крышкой - PullRequest
0 голосов
/ 19 марта 2020

Я создал пользовательский комбинированный список с ярлыком, чтобы закрыть комбинированный список (поскольку он очень уродливый), когда он не используется. На этикетке с крышкой должен отображаться элемент дисплея. Накладные и открывающие вилки прекрасно работают, однако текст на отображаемой метке является предыдущим значением, а не текущим. Проходя над меткой с помощью мыши, запускает событие ввода метки с помощью мыши, и тогда значение на дисплее является правильным Вот код для пользовательского элемента управления.

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)

и он работает.

1 Ответ

0 голосов
/ 19 марта 2020

SelectedText - для выделенной части текста, которая выделена в данный момент, а не для выбранного элемента. Вы, вероятно, хотите что-то вроде этого:

If SelectedIndex = -1 Then
  Lid.Text = String.Empty
Else
  Lid.Text = Items(SelectedIndex).ToString()
End If

Да, у вас есть раздражающий контроль.

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