带盖子的组合框自定义控件



我创建了一个自定义的组合框,它带有一个标签,可以在不使用时覆盖组合框(因为它很难看(。标签,开关是盖子应该显示显示成员。覆盖和揭开分叉很好,但是标签上显示的文本是以前的值,而不是当前的值。用鼠标传递标签,触发标签鼠标进入事件,然后显示值正确。这是自定义控件的代码。

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

要测试控件,请将控件从工具箱拖动到您的窗体,并将控件绑定到您有的任何表

我尝试使用文本代替所选文本-相同的结果

我找到了解决办法。将move语句更改为:

Lid.Text = Items(SelectedIndex)(DisplayMember)

并且是有效的。

SelectedText用于当前所选文本的高亮显示部分,而不是所选项目。你可能想要这样的东西:

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

是的,你的控制很烦人。

最新更新