From 4654d1d9c2bce49c8641d3c2bb492498ea1fdd4a Mon Sep 17 00:00:00 2001 From: ww-rm Date: Sun, 30 Mar 2025 20:52:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=9A=E9=A1=B9=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=8D=A1=E9=A1=BF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controls/SpineListView.Designer.cs | 7 +++++++ SpineViewer/Controls/SpineListView.cs | 20 ++++++++++++++++--- SpineViewer/Controls/SpineListView.resx | 3 +++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/SpineViewer/Controls/SpineListView.Designer.cs b/SpineViewer/Controls/SpineListView.Designer.cs index 62c5023..5463fd3 100644 --- a/SpineViewer/Controls/SpineListView.Designer.cs +++ b/SpineViewer/Controls/SpineListView.Designer.cs @@ -54,6 +54,7 @@ toolStripMenuItem_DetailsView = new ToolStripMenuItem(); imageList_LargeIcon = new ImageList(components); imageList_SmallIcon = new ImageList(components); + timer_SelectedIndexChangedDebounce = new System.Windows.Forms.Timer(components); contextMenuStrip.SuspendLayout(); SuspendLayout(); // @@ -250,6 +251,11 @@ imageList_SmallIcon.ImageSize = new Size(48, 48); imageList_SmallIcon.TransparentColor = Color.Transparent; // + // timer_SelectedIndexChangedDebounce + // + timer_SelectedIndexChangedDebounce.Interval = 30; + timer_SelectedIndexChangedDebounce.Tick += timer_SelectedIndexChangedDebounce_Tick; + // // SpineListView // AutoScaleDimensions = new SizeF(11F, 24F); @@ -287,5 +293,6 @@ private ToolStripMenuItem toolStripMenuItem_SelectAll; private ToolStripSeparator toolStripSeparator4; private ToolStripMenuItem toolStripMenuItem_AddFromClipboard; + private System.Windows.Forms.Timer timer_SelectedIndexChangedDebounce; } } diff --git a/SpineViewer/Controls/SpineListView.cs b/SpineViewer/Controls/SpineListView.cs index 3586474..97a49f0 100644 --- a/SpineViewer/Controls/SpineListView.cs +++ b/SpineViewer/Controls/SpineListView.cs @@ -228,6 +228,18 @@ namespace SpineViewer.Controls } private void listView_SelectedIndexChanged(object sender, EventArgs e) + { + timer_SelectedIndexChangedDebounce.Stop(); + timer_SelectedIndexChangedDebounce.Start(); + } + + private void timer_SelectedIndexChangedDebounce_Tick(object sender, EventArgs e) + { + timer_SelectedIndexChangedDebounce.Stop(); + _listView_SelectedIndexChanged(listView, EventArgs.Empty); + } + + private void _listView_SelectedIndexChanged(object sender, EventArgs e) { lock (Spines) { @@ -395,17 +407,19 @@ namespace SpineViewer.Controls return; } - foreach (var i in listView.SelectedIndices.Cast().OrderByDescending(x => x)) + lock (Spines) { - listView.Items.RemoveAt(i); - lock (Spines) + listView.BeginUpdate(); + foreach (var i in listView.SelectedIndices.Cast().OrderByDescending(x => x)) { + listView.Items.RemoveAt(i); var spine = spines[i]; spines.RemoveAt(i); listView.SmallImageList.Images.RemoveByKey(spine.ID); listView.LargeImageList.Images.RemoveByKey(spine.ID); spine.Dispose(); } + listView.EndUpdate(); } } diff --git a/SpineViewer/Controls/SpineListView.resx b/SpineViewer/Controls/SpineListView.resx index bb6cf1c..dc6495c 100644 --- a/SpineViewer/Controls/SpineListView.resx +++ b/SpineViewer/Controls/SpineListView.resx @@ -126,4 +126,7 @@ 252, 19 + + 771, 24 + \ No newline at end of file