Я сделал своеобразный пользовательский список и включил возможность добавления изображения к каждому элементу. Я хочу, чтобы иметь возможность изменять эти изображения по одному по своему усмотрению и не слишком уверен в том, как это сделать. На данный момент вы можете выбрать только то изображение, которое вы хотели бы видеть в каждом элементе.Уточнение пользовательского элемента управления списком
Public Class CustomListBox
Public label As Label
Public pic As PictureBox
Public panel As Panel
Public itemID As String
Public itemCollection As New Collection
Public bgColor As Color
Public txtEnterColor As Color = Color.FromArgb(80, 80, 80)
Public txtColor As Color = Color.FromArgb(150, 150, 150)
Public bgEntercolor As Color = Color.FromArgb(230, 230, 230)
Public x, y, paddingInt As Integer
Public itemHeight As Integer = 40
Public image As Image = My.Resources.FavNone
Public Event Item_Clicked()
Private Property ItemBackColor As Color
Get
Return BackColor
End Get
Set(ByVal value As Color)
bgColor = value
End Set
End Property
Private Property ItemPadding As Padding
Get
Return Padding
End Get
Set(ByVal value As Padding)
Padding = value
End Set
End Property
Public Property HoverBackColor As Color
Get
Return bgEntercolor
End Get
Set(ByVal value As Color)
bgEntercolor = value
End Set
End Property
Public Property ItemImage As Image
Get
Return image
End Get
Set(ByVal value As Image)
image = value
End Set
End Property
Public Property HoverTextColor As Color
Get
Return txtEnterColor
End Get
Set(ByVal value As Color)
txtEnterColor = value
End Set
End Property
Public Property TextColor As Color
Get
Return txtColor
End Get
Set(ByVal value As Color)
txtColor = value
End Set
End Property
Public Property TrueItemHeight As Integer
Get
Return itemHeight
End Get
Set(ByVal value As Integer)
itemHeight = value
End Set
End Property
Public Sub UpdateItems()
For Each item As String In itemCollection
label = New Label
pic = New PictureBox
panel = New Panel
With pic
.Width = itemHeight
.Height = itemHeight
.SizeMode = PictureBoxSizeMode.Zoom
.Image = image
End With
With label
.BackColor = (bgColor)
.ForeColor = (txtColor)
.Width = Me.Width - itemHeight
.Height = itemHeight
.Tag = item
.Height = itemHeight
.Padding = ItemPadding
.Text = item
.Left = itemHeight
.TextAlign = ContentAlignment.MiddleLeft
AddHandler label.MouseEnter, AddressOf Item_Enter
AddHandler label.MouseLeave, AddressOf Item_Leave
AddHandler label.MouseUp, AddressOf Item_Mousedown
End With
With panel
.Location = New Point(x, y)
.Width = Me.Width
.Height = itemHeight
.Controls.Add(pic)
.Controls.Add(label)
y += .Height + paddingInt
End With
Me.Controls.Add(panel)
Next
End Sub
Private Sub Item_Enter(ByVal sender As Label, ByVal e As EventArgs)
sender.BackColor = (bgEnterColor)
sender.ForeColor = (txtEnterColor)
itemID = sender.Tag
End Sub
Private Sub Item_Leave(ByVal sender As Label, ByVal e As EventArgs)
sender.BackColor = (bgColor)
sender.ForeColor = (txtColor)
End Sub
Private Sub Item_Mousedown(ByVal sender As Label, ByVal e As MouseEventArgs)
Select Case e.button
Case Windows.Forms.MouseButtons.Left
RaiseEvent Item_Clicked()
End Select
End Sub
End Class
Я знаю, что нужно что-то добавить в храповой случае items.Possible установить переменную с порядковым номером на этикетке, может быть ...?
Кроме того, как получить автоматические предложения при вводе кода. Например, я хочу иметь возможность набирать CustomListBox1.itemCollection.add («Текст», imageSrc) ... и т. Д. Я просто понятия не имею, что вводить в Google, кроме как просматривать множество пользовательских элементов управления, пока не найду тот, который включает это.
EDIT
Я посмотрел в this пользовательские ListBox.
Я пытался добавить событие MouseMove для каждого элемента, чтобы думали, что это будет так просто, как и это:
Private Sub HoverItem(ByVal item As ColorListboxItem, ByVal e As MouseEventArgs)
msgbox(1)
End Sub
... в «Methods» область, а затем
AddHandler .mousemove, AddressOf HoverItem
к элементу «OnDrawItem». К сожалению, для меня это явно не так просто, как не показывает msgbox. Может ли кто-нибудь, имеющий опыт работы с этим элементом управления, дать представление о том, как он работает. И, возможно, пример события MouseMove, и тогда я получу представление о том, как добавить больше событий (Mouseleave, DblClick ... и т. Д.)
Это то, что было сделано для WPF. Никакое повторное изобретение колеса и привязок уже на месте. – OneFineDay