在 Visual Basic (Visual Studio 2019) 中运行时创建的 ListView 中的索引选择



>我正在尝试使用在运行时创建的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

最新更新