首页 > 解决方案 > 列表视图不更新子项(VB.net)

问题描述

我在 VB.net 中有一个列表视图,其中有两列(项目名称、坐标)。Itemname 列填充了每行的预定义名称(总行数=5),当用户选择一行并单击屏幕上的任意位置时,坐标列将填充鼠标位置坐标。

**Itemname|Coordinates:**
    Item1  (x,y)
    Item2  (x,y)
    Item3  (x,y)
.......

我的代码仅在我第一次选择一行并单击任意位置时才有效,但是当我选择同一行并再次单击以更改坐标时,它不会更新为新坐标。这是我的代码Item1

Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) 
Handles ListView1.SelectedIndexChanged

If ListView1.Items(0).Selected = True Then

     Dim mp As Point = MousePosition

     Dim lvitem As ListViewItem

     ListView1.BeginUpdate()

     lvitem = Me.ListView1.Items.Item(0)   
     lvitem.SubItems.Add(mp.ToString)  

     ListView1.Update()
     ListView1.EndUpdate()

End If

End Sub

结果:

first time selected item1:
    Item1  {X=801,Y=432}
   
second time selected item1:
    Item1  {X=801,Y=432} ===>doesn't update to second click {X=743,Y=231}

我怎样才能解决这个问题?

标签: vb.netlistview

解决方案


这是因为您正在使用的事件。

Handles ListView1.SelectedIndexChanged

这将仅在 ListView 中的选定项目将被更改时调用 sub。在第二次单击时,您不会更改所选索引,它保持不变,这就是它不更新的原因。

将事件更改为 Click 或 MouseClick:

Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) 
Handles ListView1.Click

推荐阅读