Refactor ListView item move logic for single selection
Simplified item move code to handle only the first selected item, improving UI performance and reliability. Removed loop and cloning logic, added BeginUpdate/EndUpdate, and ensured proper selection, focus, and visibility. Early returns prevent invalid moves at boundaries.
This commit is contained in:
@@ -657,25 +657,35 @@ Public Class frmNIVerknuepfungen
|
||||
If LVW.SelectedItems.Count > 0 Then
|
||||
LVW.Sorting = Windows.Forms.SortOrder.None
|
||||
If Down = True Then
|
||||
If LVW.SelectedItems(LVW.SelectedItems.Count - 1).Index < LVW.Items.Count - 1 Then
|
||||
For i = LVW.SelectedItems.Count - 1 To 0 Step -1
|
||||
OldItem = LVW.Items(LVW.SelectedItems(i).Index + 1)
|
||||
OldPos = LVW.Items(LVW.SelectedItems(i).Index).Index
|
||||
LVW.Items(OldPos + 1) = LVW.SelectedItems(i).Clone
|
||||
LVW.Items(OldPos) = OldItem
|
||||
LVW.Items(OldPos + 1).Selected = True
|
||||
Next
|
||||
End If
|
||||
If LVW.SelectedItems(0).Index = LVW.Items.Count - 1 Then Return
|
||||
Dim index = LVW.SelectedItems(0).Index
|
||||
|
||||
LVW.BeginUpdate()
|
||||
Try
|
||||
Dim item = LVW.SelectedItems(0)
|
||||
LVW.Items.RemoveAt(index)
|
||||
LVW.Items.Insert(index + 1, item)
|
||||
item.Selected = True
|
||||
item.Focused = True
|
||||
item.EnsureVisible()
|
||||
Finally
|
||||
LVW.EndUpdate()
|
||||
End Try
|
||||
Else
|
||||
If LVW.SelectedItems(0).Index > 0 Then
|
||||
For i = 0 To LVW.SelectedItems.Count - 1
|
||||
OldItem = LVW.Items(LVW.SelectedItems(i).Index - 1)
|
||||
OldPos = LVW.Items(LVW.SelectedItems(i).Index).Index
|
||||
LVW.Items(OldPos - 1) = LVW.SelectedItems(i).Clone
|
||||
LVW.Items(OldPos) = OldItem
|
||||
LVW.Items(OldPos - 1).Selected = True
|
||||
Next
|
||||
End If
|
||||
If LVW.SelectedItems(0).Index = 0 Then Return
|
||||
Dim index = LVW.SelectedItems(0).Index
|
||||
|
||||
LVW.BeginUpdate()
|
||||
Try
|
||||
Dim item = LVW.SelectedItems(0)
|
||||
LVW.Items.RemoveAt(index)
|
||||
LVW.Items.Insert(index - 1, item)
|
||||
item.Selected = True
|
||||
item.Focused = True
|
||||
item.EnsureVisible()
|
||||
Finally
|
||||
LVW.EndUpdate()
|
||||
End Try
|
||||
End If
|
||||
'' definieren das am aktuellen Profil Änderungen vorgenommen wurden
|
||||
Me._selectedProfil.setChanged()
|
||||
|
||||
Reference in New Issue
Block a user