如何使用按钮移动到 ListView 的下一个项目

How to move to next Item of a ListView using a Button

我想使用按钮将 selection 移动到 ListView 的下一个项目。
我需要删除select 当前 select 的项目和 select 它下面的项目。
我试过这段代码,但它没有按预期工作:

ListView1.Items(ListView1.SelectedItems(0).Index + 1).Selected = True
ListView1.Items(ListView1.SelectedItems(0).Index + 1).EnsureVisible()
ListView1.Focus()
ListView1.Select()

我该怎么做?

对于selectListView的上一个或下一个Item,可以考虑SelectedIndices集合第一个元素返回的索引。
如果此集合为空,则可以假设此索引为 0.
使用 SelectedItems.Clear() 清除当前 selection,然后将此索引递增或递减 1,验证新索引不会超出 Items 集合的范围.

如果 selected 项目当前不可见(它在 ListView 客户区域之外),则 EnsureVisible() 方法将其带入视图。

由于您使用按钮更改 selected 项目并将 ListView.HideSelection 属性 设置为 False 可能没有所需的 视觉效果,您可能还想聚焦您的 ListView,因为单击 Button 会从其他控件窃取焦点(除非 Button 本身不 selectable)。

假设您有一个名为 Listview1 的 ListView 和两个名为 btnPreviousbtnNext 的按钮,用于将 selection 移动到上一个和下一个项目:

Private Sub btnPrevious_Click(sender As Object, e As EventArgs) Handles btnPrevious.Click
    Dim itemSelected As Integer = GetListViewSelectedItemIndex(ListView1)
    itemSelected += If(itemSelected > 0, -1, 0)
    SetListViewSelectedItem(ListView1, itemSelected)
End Sub

Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
    Dim itemSelected As Integer = GetListViewSelectedItemIndex(ListView1)
    itemSelected += If(itemSelected < ListView1.Items.Count - 1, 1, 0)
    SetListViewSelectedItem(ListView1, itemSelected)
End Sub

Private Function GetListViewSelectedItemIndex(lv As ListView) As Integer
    Return If(lv.SelectedItems.Count > 0, lv.SelectedIndices(0), 0)
End Function

Private Sub SetListViewSelectedItem(lv As ListView, index As Integer)
    If lv.Items.Count = 0 Then Return
    lv.SelectedItems.Clear()
    If Not lv.Focused Then lv.Focus()
    lv.EnsureVisible(index)
    lv.Items(index).Selected = True
End Sub

看似简单,但你试过了吗:

    ListView1.SelectedIndex = ListView1.SelectedIndex + 1 

此外,不要忘记所选项目是列表中最后一个的迭代,这样您就可以继续到第一个。