Выбор индекса в ListView, созданном во время выполнения в Visual Basi c (Visual Studio 2019) - PullRequest
2 голосов
/ 09 января 2020

Я пытаюсь использовать окно 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

Ответы [ 2 ]

2 голосов
/ 09 января 2020

Вам нужно добавить обработчик события в событие 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, если вы удалили ListView

RemoveHandler lstMyList.SelectedIndexChanged, AddressOf lstMylist_SelectedIndexChanged
1 голос
/ 09 января 2020

Ответ Стива сработает. Но альтернативой является просто сделать ваш ListView 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 должно появиться соответствующее RemoveHandler, если ListView должен быть удален и добавлен повторно.

...