如何使用按钮移动到 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 和两个名为 btnPrevious
和 btnNext
的按钮,用于将 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
此外,不要忘记所选项目是列表中最后一个的迭代,这样您就可以继续到第一个。
我想使用按钮将 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 和两个名为 btnPrevious
和 btnNext
的按钮,用于将 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
此外,不要忘记所选项目是列表中最后一个的迭代,这样您就可以继续到第一个。