ListViewItem.Selected =是否被覆盖?

时间:2019-09-23 11:55:35

标签: vb.net listview

你好,在那里。第一篇文章。请保持温柔。 我试图使用向上和向下箭头键在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”,然后使用向下箭头键将其向下移动到列表中。但是使用向上箭头键的结果不是很好。 希望得到任何指导! 谢谢。

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况,是因为当您删除该项目时,所选索引仍然相同,因此选择将转到下一个项目。

For more information

要更正您可以执行的操作,例如从列表中删除并插入两个项目,以保持所选索引的顺序。

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