如何使用按钮移动到列表视图的下一个项目



我想使用Button将所选内容移动到ListView的下一个Item。
我需要取消选中当前选中的项目,并选择它下面的项目。
我试过这段代码,但它没有像预期的那样工作:

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

我该怎么做呢?

要选择ListView的上一个或下一个Item,您可以考虑SelectedIndices集合的第一个元素返回的索引。
如果这个集合是空的,你可以假设这个索引是0
SelectedItems.Clear()清除当前的选择,然后用1增加或减少这个索引,验证新的索引没有落在Items集合的边界之外。

EnsureVisible()方法会在当前不可见的情况下(它在ListView客户端区域之外)将选中的项目带入视图。

因为你正在使用按钮来改变选择的项目和设置ListView。False的hidesselection属性可能没有期望的视觉效果,你也可能想要聚焦你的ListView,因为点击按钮窃取焦点从其他控件(除非按钮本身是不可选择的)。

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

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 

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

相关内容

最新更新