vb.net - Listview - itemchecked
问题描述
我需要有关使用 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()
当我填充列表视图时,将为所有记录执行事件过程......
谁能帮我?
谢谢塞莫拉
解决方案
看起来没有办法绕过正在引发的事件。我只是在添加项目之前测试了设置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
并且在它已经填充之前不要这样做。
推荐阅读
- reactjs - TS React:buildArray 不是函数
- mysql - 命令执行期间遇到致命错误。-- aspx VB - MYSQL
- python - Pygame:敌人移动循环
- python - 使用 BeautifulSoup 和 Python 抓取表格
- python - 有没有办法在不使用 for 循环的情况下使用 Python 中的前几行在列上计算公式?
- c++ - 有没有办法在 C++ 中将方法存储在某种类型的向量中?
- url - 通过 URL 向多个联系人发送 WhatsApp 消息
- stripe-payments - 有没有办法在构建服务器上运行 Stripe CLI?
- arrays - 我可以在同一轴的数组中添加超过 1 个维度吗?
- c - 如果二维数组的大小太大,则会出现分段错误