From 1f2d1d8bfb1737dbab287cc6335ebf6405046046 Mon Sep 17 00:00:00 2001 From: OlgunR Date: Thu, 12 Mar 2026 11:14:17 +0100 Subject: [PATCH] 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. --- ToolCollection/frmNIVerknuepfungen.vb | 46 ++++++++++++++++----------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/ToolCollection/frmNIVerknuepfungen.vb b/ToolCollection/frmNIVerknuepfungen.vb index f302aa6..a0be36a 100644 --- a/ToolCollection/frmNIVerknuepfungen.vb +++ b/ToolCollection/frmNIVerknuepfungen.vb @@ -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()