你好,在那里。第一篇文章。请保持温柔。 我试图使用向上和向下箭头键在ListView控件上上下移动选定的项目。 这是我的代码。这是一个Windows Forms项目,具有一个表单和一个ListView控件。 MultiSelect = False。排序=无。查看=详细信息。一列。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
ListView1.Items.Add("A")
ListView1.Items.Add("B")
ListView1.Items.Add("C")
ListView1.Items.Add("D")
ListView1.Items.Add("E")
End Sub
Private Sub ListView1_KeyDown(sender As Object, e As KeyEventArgs) Handles ListView1.KeyDown
Dim iInsertAt As Integer
If ListView1.SelectedItems.Count = 1 Then
Dim lSelectedItem As ListViewItem = ListView1.SelectedItems(0)
Select Case e.KeyCode
Case Keys.Up
If lSelectedItem.Index > 0 Then
iInsertAt = lSelectedItem.Index - 1
ListView1.Items.Remove(lSelectedItem)
lSelectedItem = ListView1.Items.Insert(iInsertAt, lSelectedItem)
End If
Case Keys.Down
If lSelectedItem.Index < ListView1.Items.Count - 1 Then
iInsertAt = lSelectedItem.Index + 1
ListView1.Items.Remove(lSelectedItem)
lSelectedItem = ListView1.Items.Insert(iInsertAt, lSelectedItem)
End If
End Select
lSelectedItem.Selected = True
End If
End Sub
该代码可以正常工作,除了在将它移到^ up ^位置后不能正确突出显示lSelectedItem之外。如果运行代码,则可以选择“ A”,然后使用向下箭头键将其向下移动到列表中。但是使用向上箭头键的结果不是很好。 希望得到任何指导! 谢谢。
答案 0 :(得分:0)
之所以发生这种情况,是因为当您删除该项目时,所选索引仍然相同,因此选择将转到下一个项目。
要更正您可以执行的操作,例如从列表中删除并插入两个项目,以保持所选索引的顺序。
ex :
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
ListView1.Items.Add("A")
ListView1.Items.Add("B")
ListView1.Items.Add("C")
ListView1.Items.Add("D")
ListView1.Items.Add("E")
End Sub
Private Sub ListView1_KeyDown(sender As Object, e As KeyEventArgs) Handles ListView1.KeyDown
Dim iInsertAt As Integer
If ListView1.SelectedItems.Count = 1 Then
Dim lSelectedItem As ListViewItem = ListView1.SelectedItems(0)
Select Case e.KeyCode
Case Keys.Up
If lSelectedItem.Index > 0 Then
iInsertAt = lSelectedItem.Index - 1
Dim item2 = ListView1.Items.Item(iInsertAt)
'remove and Insert two
ListView1.Items.Remove(item2)
ListView1.Items.Insert(iInsertAt + 1, item2)
ListView1.Items.Remove(lSelectedItem)
lSelectedItem = ListView1.Items.Insert(iInsertAt, lSelectedItem)
End If
Case Keys.Down
If lSelectedItem.Index < ListView1.Items.Count - 1 Then
iInsertAt = lSelectedItem.Index + 1
ListView1.Items.Remove(lSelectedItem)
lSelectedItem = ListView1.Items.Insert(iInsertAt, lSelectedItem)
End If
End Select
End If
End Sub