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 If LVW.SelectedItems.Count > 0 Then
LVW.Sorting = Windows.Forms.SortOrder.None LVW.Sorting = Windows.Forms.SortOrder.None
If Down = True Then If Down = True Then
If LVW.SelectedItems(LVW.SelectedItems.Count - 1).Index < LVW.Items.Count - 1 Then If LVW.SelectedItems(0).Index = LVW.Items.Count - 1 Then Return
For i = LVW.SelectedItems.Count - 1 To 0 Step -1 Dim index = LVW.SelectedItems(0).Index
OldItem = LVW.Items(LVW.SelectedItems(i).Index + 1)
OldPos = LVW.Items(LVW.SelectedItems(i).Index).Index LVW.BeginUpdate()
LVW.Items(OldPos + 1) = LVW.SelectedItems(i).Clone Try
LVW.Items(OldPos) = OldItem Dim item = LVW.SelectedItems(0)
LVW.Items(OldPos + 1).Selected = True LVW.Items.RemoveAt(index)
Next LVW.Items.Insert(index + 1, item)
End If item.Selected = True
item.Focused = True
item.EnsureVisible()
Finally
LVW.EndUpdate()
End Try
Else Else
If LVW.SelectedItems(0).Index > 0 Then If LVW.SelectedItems(0).Index = 0 Then Return
For i = 0 To LVW.SelectedItems.Count - 1 Dim index = LVW.SelectedItems(0).Index
OldItem = LVW.Items(LVW.SelectedItems(i).Index - 1)
OldPos = LVW.Items(LVW.SelectedItems(i).Index).Index LVW.BeginUpdate()
LVW.Items(OldPos - 1) = LVW.SelectedItems(i).Clone Try
LVW.Items(OldPos) = OldItem Dim item = LVW.SelectedItems(0)
LVW.Items(OldPos - 1).Selected = True LVW.Items.RemoveAt(index)
Next LVW.Items.Insert(index - 1, item)
End If item.Selected = True
item.Focused = True
item.EnsureVisible()
Finally
LVW.EndUpdate()
End Try
End If End If
'' definieren das am aktuellen Profil Änderungen vorgenommen wurden '' definieren das am aktuellen Profil Änderungen vorgenommen wurden
Me._selectedProfil.setChanged() Me._selectedProfil.setChanged()