列表视图 - itemchecked

时间:2018-05-06 06:39:52

标签: vb.net listview

我需要使用ListView.ItemChecked事件的帮助。 在新的过程中(由ItemChecked事件触发),我需要从检查的记录中提取数据。

这是不起作用的代码(完成):

Private Sub lvDetail_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lvDetail.ItemChecked
    If e.Item.Checked Then
        MsgBox("Selected: " & e.Item.SubItems(4).Text)
    Else
        MsgBox("Deselected: " & e.Item.SubItems(4).Text)
    End If
End Sub

在添加lvDetail控件中的所有记录时,lvDetail.ItemChecked事件似乎运行我为每一行编写的测试。

要填充listview对象,我需要在循环中使用Add语句:

For Each ws_film In ws_elenco_film
Dim item As New ListViewItem(ws_film.Get_Titolo)

item.SubItems.Add(ws_film.Get_Id_tmdb)

lvFilmDetail.Items.Add(item)
Next

lvFilmDetail.EndUpdate()

当我填充listview时,会对所有记录执行事件过程......

任何人都可以帮助我吗?

谢谢Semola

1 个答案:

答案 0 :(得分:0)

看起来似乎没有办法解决这个事件。我刚刚在添加项目之前测试了将CheckBoxes设置为False,并且在添加项目时阻止了事件被引发,但将CheckBoxes再次设置为True会导致事件发生为每个项目筹集资金。

我建议你最好的选择是使用你自己的旗帜,你可以在事件处理程序中测试。它不会阻止事件的发生,但你不会在实际情况下做任何事情。 e.g。

Private Sub lvDetail_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles lvDetail.ItemChecked
    If Not ignoredItemChecked Then
        If e.Item.Checked Then
            MsgBox("Selected: " & e.Item.SubItems(4).Text)
        Else
            MsgBox("Deselected: " & e.Item.SubItems(4).Text)
        End If
    End If
End Sub

ignoreItemChecked = True

For Each ws_film In ws_elenco_film
    Dim item As New ListViewItem(ws_film.Get_Titolo)

    item.SubItems.Add(ws_film.Get_Id_tmdb)

    lvFilmDetail.Items.Add(item)
Next

ignoreItemChecked = False

替代方法是不使用Handles子句,而是使用AddHandler注册事件处理程序,而不是在已填充之前执行此操作。