首页 文章

列表视图 - itemchecked

提问于
浏览
0

我需要帮助使用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

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

    我建议你最好选择使用你自己的旗帜,你可以在事件处理程序中测试 . 它不会阻止事件被提升,但是你没有;实际上它必须做任何事情 . 例如

    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 注册事件处理程序,直到它已经填充为止 .

相关问题