>我正在尝试使用在运行时创建的ListView框,并且能够填充项目,但SelectedIndexChanged事件不起作用。我知道我错过了一些非常简单的东西。下面是一个最小的工作示例,我通过单击按钮创建 ListView 并填充几个项目。当我选择一个项目时,SelectedIndexChanged 事件中没有任何反应。
Public Class Form1
Dim lstMylist As ListView
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
lstMylist = New ListView()
lstMylist.Location = New Point(37, 312)
lstMylist.Size = New Size(150, 150)
Me.Controls.Add(lstMylist)
lstMylist.View = View.SmallIcon
Dim myListItem1 As ListViewItem
myListItem1 = lstMylist.Items.Add("Item 1")
Dim myListItem2 As ListViewItem
myListItem2 = lstMylist.Items.Add("Item 2")
End Sub
Private Sub lstMylist_SelectedIndexChanged(sender As Object, e As EventArgs)
MessageBox.Show("I am here")
Select Case lstMylist.FocusedItem.Index
Case 0
MessageBox.Show("item 1")
Case 1
MessageBox.Show("item 2")
Case Else
MessageBox.Show("invalid")
End Select
End Sub
End Class
您需要将事件处理程序添加到 ListView SelectedIndexChanged 事件
lstMylist = New ListView()
lstMylist.Location = New Point(37, 312)
lstMylist.Size = New Size(150, 150)
' Add the event handler for the listview
AddHandler lstMyList.SelectedIndexChanged, AddressOf lstMylist_SelectedIndexChanged
Me.Controls.Add(lstMylist)
lstMylist.View = View.SmallIcon
如 djv 所述,如果删除列表视图,则调用 RemoveHandler 非常重要
RemoveHandler lstMyList.SelectedIndexChanged, AddressOf lstMylist_SelectedIndexChanged
史蒂夫的答案会起作用。但另一种方法是简单地使您的列表视图WithEvents
Dim WithEvents lstMylist As ListView
并将句柄添加到方法声明中
Private Sub lstMylist_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstMylist.SelectedIndexChanged
这更像是一种 VB.NET 做事的方式。AddHandler
类似于 C#Event += new EventHandler
语法。
请注意,如果使用AddHandler
,如果要重复删除和添加 ListView,则应显示匹配的RemoveHandler
。