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:
OlgunR
2026-03-12 11:14:17 +01:00
parent 4d201411f6
commit 1f2d1d8bfb

View File

@@ -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()