增加拖动顺序调整
This commit is contained in:
90
SpineViewer/src/SpineListView.Designer.cs
generated
90
SpineViewer/src/SpineListView.Designer.cs
generated
@@ -28,16 +28,20 @@
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SpineListView));
|
||||
tableLayoutPanel = new TableLayoutPanel();
|
||||
flowLayoutPanel_Buttons = new FlowLayoutPanel();
|
||||
button_Add = new Button();
|
||||
button_Insert = new Button();
|
||||
button_Remove = new Button();
|
||||
button_MoveUp = new Button();
|
||||
button_MoveDown = new Button();
|
||||
button_Insert = new Button();
|
||||
button_RemoveAll = new Button();
|
||||
listView = new ListView();
|
||||
columnHeader_Name = new ColumnHeader();
|
||||
columnHeader_Version = new ColumnHeader();
|
||||
toolTip = new ToolTip(components);
|
||||
tableLayoutPanel.SuspendLayout();
|
||||
flowLayoutPanel_Buttons.SuspendLayout();
|
||||
SuspendLayout();
|
||||
@@ -62,10 +66,11 @@
|
||||
//
|
||||
flowLayoutPanel_Buttons.AutoSize = true;
|
||||
flowLayoutPanel_Buttons.Controls.Add(button_Add);
|
||||
flowLayoutPanel_Buttons.Controls.Add(button_Insert);
|
||||
flowLayoutPanel_Buttons.Controls.Add(button_Remove);
|
||||
flowLayoutPanel_Buttons.Controls.Add(button_MoveUp);
|
||||
flowLayoutPanel_Buttons.Controls.Add(button_MoveDown);
|
||||
flowLayoutPanel_Buttons.Controls.Add(button_Insert);
|
||||
flowLayoutPanel_Buttons.Controls.Add(button_RemoveAll);
|
||||
flowLayoutPanel_Buttons.Dock = DockStyle.Fill;
|
||||
flowLayoutPanel_Buttons.Location = new Point(3, 3);
|
||||
flowLayoutPanel_Buttons.Name = "flowLayoutPanel_Buttons";
|
||||
@@ -76,37 +81,28 @@
|
||||
//
|
||||
button_Add.Anchor = AnchorStyles.None;
|
||||
button_Add.AutoSize = true;
|
||||
button_Add.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
button_Add.Image = (Image)resources.GetObject("button_Add.Image");
|
||||
button_Add.Location = new Point(3, 3);
|
||||
button_Add.Name = "button_Add";
|
||||
button_Add.Size = new Size(56, 34);
|
||||
button_Add.Size = new Size(34, 34);
|
||||
button_Add.TabIndex = 0;
|
||||
button_Add.Text = "添加";
|
||||
toolTip.SetToolTip(button_Add, "在末尾添加项");
|
||||
button_Add.UseVisualStyleBackColor = true;
|
||||
button_Add.Click += button_Add_Click;
|
||||
//
|
||||
// button_Insert
|
||||
//
|
||||
button_Insert.Anchor = AnchorStyles.None;
|
||||
button_Insert.AutoSize = true;
|
||||
button_Insert.Enabled = false;
|
||||
button_Insert.Location = new Point(65, 3);
|
||||
button_Insert.Name = "button_Insert";
|
||||
button_Insert.Size = new Size(56, 34);
|
||||
button_Insert.TabIndex = 4;
|
||||
button_Insert.Text = "插入";
|
||||
button_Insert.UseVisualStyleBackColor = true;
|
||||
button_Insert.Click += button_Insert_Click;
|
||||
//
|
||||
// button_Remove
|
||||
//
|
||||
button_Remove.Anchor = AnchorStyles.None;
|
||||
button_Remove.AutoSize = true;
|
||||
button_Remove.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
button_Remove.Enabled = false;
|
||||
button_Remove.Location = new Point(127, 3);
|
||||
button_Remove.Image = (Image)resources.GetObject("button_Remove.Image");
|
||||
button_Remove.Location = new Point(43, 3);
|
||||
button_Remove.Name = "button_Remove";
|
||||
button_Remove.Size = new Size(56, 34);
|
||||
button_Remove.Size = new Size(34, 34);
|
||||
button_Remove.TabIndex = 1;
|
||||
button_Remove.Text = "移除";
|
||||
toolTip.SetToolTip(button_Remove, "移除选中项");
|
||||
button_Remove.UseVisualStyleBackColor = true;
|
||||
button_Remove.Click += button_Remove_Click;
|
||||
//
|
||||
@@ -116,11 +112,12 @@
|
||||
button_MoveUp.AutoSize = true;
|
||||
button_MoveUp.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
button_MoveUp.Enabled = false;
|
||||
button_MoveUp.Location = new Point(189, 3);
|
||||
button_MoveUp.Image = (Image)resources.GetObject("button_MoveUp.Image");
|
||||
button_MoveUp.Location = new Point(83, 3);
|
||||
button_MoveUp.Name = "button_MoveUp";
|
||||
button_MoveUp.Size = new Size(56, 34);
|
||||
button_MoveUp.Size = new Size(34, 34);
|
||||
button_MoveUp.TabIndex = 2;
|
||||
button_MoveUp.Text = "上移";
|
||||
toolTip.SetToolTip(button_MoveUp, "上移选中项");
|
||||
button_MoveUp.UseVisualStyleBackColor = true;
|
||||
button_MoveUp.Click += button_MoveUp_Click;
|
||||
//
|
||||
@@ -130,16 +127,47 @@
|
||||
button_MoveDown.AutoSize = true;
|
||||
button_MoveDown.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
button_MoveDown.Enabled = false;
|
||||
button_MoveDown.Location = new Point(251, 3);
|
||||
button_MoveDown.Image = (Image)resources.GetObject("button_MoveDown.Image");
|
||||
button_MoveDown.Location = new Point(123, 3);
|
||||
button_MoveDown.Name = "button_MoveDown";
|
||||
button_MoveDown.Size = new Size(56, 34);
|
||||
button_MoveDown.Size = new Size(34, 34);
|
||||
button_MoveDown.TabIndex = 3;
|
||||
button_MoveDown.Text = "下移";
|
||||
toolTip.SetToolTip(button_MoveDown, "下移选中项");
|
||||
button_MoveDown.UseVisualStyleBackColor = true;
|
||||
button_MoveDown.Click += button_MoveDown_Click;
|
||||
//
|
||||
// button_Insert
|
||||
//
|
||||
button_Insert.Anchor = AnchorStyles.None;
|
||||
button_Insert.AutoSize = true;
|
||||
button_Insert.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
button_Insert.Enabled = false;
|
||||
button_Insert.Image = (Image)resources.GetObject("button_Insert.Image");
|
||||
button_Insert.Location = new Point(163, 3);
|
||||
button_Insert.Name = "button_Insert";
|
||||
button_Insert.Size = new Size(34, 34);
|
||||
button_Insert.TabIndex = 4;
|
||||
toolTip.SetToolTip(button_Insert, "在选中项之前插入项");
|
||||
button_Insert.UseVisualStyleBackColor = true;
|
||||
button_Insert.Click += button_Insert_Click;
|
||||
//
|
||||
// button_RemoveAll
|
||||
//
|
||||
button_RemoveAll.Anchor = AnchorStyles.None;
|
||||
button_RemoveAll.AutoSize = true;
|
||||
button_RemoveAll.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
button_RemoveAll.Image = (Image)resources.GetObject("button_RemoveAll.Image");
|
||||
button_RemoveAll.Location = new Point(203, 3);
|
||||
button_RemoveAll.Name = "button_RemoveAll";
|
||||
button_RemoveAll.Size = new Size(34, 34);
|
||||
button_RemoveAll.TabIndex = 5;
|
||||
toolTip.SetToolTip(button_RemoveAll, "移除所有项");
|
||||
button_RemoveAll.UseVisualStyleBackColor = true;
|
||||
button_RemoveAll.Click += button_RemoveAll_Click;
|
||||
//
|
||||
// listView
|
||||
//
|
||||
listView.AllowDrop = true;
|
||||
listView.Columns.AddRange(new ColumnHeader[] { columnHeader_Name, columnHeader_Version });
|
||||
listView.Dock = DockStyle.Fill;
|
||||
listView.FullRowSelect = true;
|
||||
@@ -151,7 +179,11 @@
|
||||
listView.TabIndex = 1;
|
||||
listView.UseCompatibleStateImageBehavior = false;
|
||||
listView.View = View.Details;
|
||||
listView.ItemDrag += listView_ItemDrag;
|
||||
listView.SelectedIndexChanged += listView_SelectedIndexChanged;
|
||||
listView.DragDrop += listView_DragDrop;
|
||||
listView.DragOver += listView_DragOver;
|
||||
listView.KeyDown += listView_KeyDown;
|
||||
//
|
||||
// columnHeader_Name
|
||||
//
|
||||
@@ -163,12 +195,12 @@
|
||||
columnHeader_Version.Text = "版本";
|
||||
columnHeader_Version.Width = 150;
|
||||
//
|
||||
// ListViewSkel
|
||||
// SpineListView
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(11F, 24F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
Controls.Add(tableLayoutPanel);
|
||||
Name = "ListViewSkel";
|
||||
Name = "SpineListView";
|
||||
Size = new Size(336, 445);
|
||||
tableLayoutPanel.ResumeLayout(false);
|
||||
tableLayoutPanel.PerformLayout();
|
||||
@@ -189,5 +221,7 @@
|
||||
private ColumnHeader columnHeader_Name;
|
||||
private ColumnHeader columnHeader_Version;
|
||||
private Button button_Add;
|
||||
private Button button_RemoveAll;
|
||||
private ToolTip toolTip;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,8 @@ using System.Windows.Forms;
|
||||
using System.Collections.ObjectModel;
|
||||
using SpineViewer.Spine;
|
||||
using System.Reflection;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace SpineViewer
|
||||
{
|
||||
@@ -130,6 +132,15 @@ namespace SpineViewer
|
||||
}
|
||||
}
|
||||
|
||||
private void button_RemoveAll_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (MessageBox.Show("确认移除所有项吗?", "操作确认", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
|
||||
{
|
||||
spines.Clear();
|
||||
listView.Items.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
private void listView_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (listView.SelectedIndices.Count <= 0)
|
||||
@@ -160,5 +171,76 @@ namespace SpineViewer
|
||||
PropertyGrid.SelectedObject = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void listView_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.Control && e.KeyCode == Keys.A)
|
||||
{
|
||||
listView.BeginUpdate();
|
||||
foreach (ListViewItem item in listView.Items)
|
||||
{
|
||||
item.Selected = true;
|
||||
}
|
||||
listView.EndUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
private void listView_ItemDrag(object sender, ItemDragEventArgs e)
|
||||
{
|
||||
DoDragDrop(e.Item, DragDropEffects.Move);
|
||||
}
|
||||
|
||||
private void listView_DragOver(object sender, DragEventArgs e)
|
||||
{
|
||||
// 检查拖放目标是否有效
|
||||
e.Effect = DragDropEffects.Move;
|
||||
|
||||
// 获取鼠标位置并确定目标索引
|
||||
var point = listView.PointToClient(new(e.X, e.Y));
|
||||
var targetItem = listView.GetItemAt(point.X, point.Y);
|
||||
|
||||
// 高亮目标项
|
||||
if (targetItem != null)
|
||||
{
|
||||
foreach (ListViewItem item in listView.Items)
|
||||
{
|
||||
item.BackColor = listView.BackColor;
|
||||
}
|
||||
targetItem.BackColor = Color.LightGray;
|
||||
}
|
||||
}
|
||||
|
||||
private void listView_DragDrop(object sender, DragEventArgs e)
|
||||
{
|
||||
// 获取拖放源项和目标项
|
||||
var draggedItem = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
|
||||
int draggedIndex = draggedItem.Index;
|
||||
var draggedSpine = spines[draggedIndex];
|
||||
|
||||
var point = listView.PointToClient(new Point(e.X, e.Y));
|
||||
var targetItem = listView.GetItemAt(point.X, point.Y);
|
||||
int targetIndex = targetItem is null ? listView.Items.Count : targetItem.Index;
|
||||
|
||||
if (targetIndex <= draggedIndex)
|
||||
{
|
||||
spines.RemoveAt(draggedIndex);
|
||||
spines.Insert(targetIndex, draggedSpine);
|
||||
listView.Items.RemoveAt(draggedIndex);
|
||||
listView.Items.Insert(targetIndex, draggedItem);
|
||||
}
|
||||
else
|
||||
{
|
||||
spines.RemoveAt(draggedIndex);
|
||||
spines.Insert(targetIndex - 1, draggedSpine);
|
||||
listView.Items.RemoveAt(draggedIndex);
|
||||
listView.Items.Insert(targetIndex - 1, draggedItem);
|
||||
}
|
||||
|
||||
// 重置背景颜色
|
||||
foreach (ListViewItem item in listView.Items)
|
||||
{
|
||||
item.BackColor = listView.BackColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,4 +117,58 @@
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="button_Add.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAAGdJREFUSEvt
|
||||
0TEKgDAQRNG9/6VXItrsBL4JbqopnsWI+RAjM2NVRIxH1v0LGcgb243KQBwkMhAHiQzEQSID+SVYD+ny
|
||||
tPRFMxl6Hb/S+lPJ7JAVMhAHiQzEQSIDcZDIQI4H7482Y8MFq6iYyveKOvcAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="button_Remove.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAADJJREFUSEtj
|
||||
YBgFo2AUjIJRQDH4//8/mKIHhtqFKUFjjCFAWzwQQToKRsEoGAWjgDIAAEamd4nzZfPwAAAAAElFTkSu
|
||||
QmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="button_MoveUp.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAAKtJREFUSEvt
|
||||
jUEOxCAMA/n/p6m6aqV2nGBIpT1xGA5jB7fee1ultXY+nX4GEY57rDoqYgTHKqMiMjhC2M8QEcHPM3gX
|
||||
IYLwUwfviYgvYzOjIkZjkY/caFSE+2DWZ6MqzOFKxlwGWQ4PFnN2potZj3nUefZsgVR7dzcNMr50L+Y/
|
||||
iD5hTth/SZYj+AHziGdXQkdl8HVP4diDDhGOPegQ4diDDhGOvw/+jopjJwdgSnDyI6KwtwAAAABJRU5E
|
||||
rkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="button_MoveDown.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAAKZJREFUSEvt
|
||||
jTEOwDAIA/n/p1M1UqXW4BhIxwyXwTE+G2NYFTO7n4F5BhcoHllX6gLFESpcoDhChQsUR6hwgeIXYeW4
|
||||
I3x3ywO7/ShYjux0J+wDj9kI/rPe05UFpNN599JF1lH/2PmUUweFP/wPheowm0cyKlwNZDImWwrZUAbc
|
||||
SQs7UrxHXBCBowy8i3ABA8cR7DNcsAIlVdncwECxI5v3GGToym4u8Ptw8siITo4AAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="button_Insert.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAALNJREFUSEvt
|
||||
kUsKgDAMRHP/S1esCjrJNJ9SQXDxupjMB1Raa5JFRPanoR5BCR7XWHVUCR7/oIcSPL45mAlXBu/edMGs
|
||||
3xKGJTPeDjtgmJXgnfkur2tAKp67L2xkHu+Onoc5FEjc8G4OesGobo3RwVFBRGNjw0FWFAF7woOVUcwj
|
||||
SrDAUgbmLJTAwHIE/QwljMCR7FjvQMFjZqznUYhQHetZFFZzPMZ/WcG5pQ+LUcJa3v6kGyUxwZMRgqWr
|
||||
AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="button_RemoveAll.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAAPdJREFUSEu1
|
||||
klsOwyAMBDlCjtL7X44qFiAyrA1E5GOqdr0PJWrKOaeU0v2R7+9f0Pe3H1+Nsl8Jx0bZa3gHhndhX+2c
|
||||
Gt7AnsJltwXjj4URIt/GhkEvQI8HcxwzD0NekB5CvxozH4VJgXy9wifHwkGvaMXjjZmfAhFlbZT6bMwy
|
||||
FBSiVMKcYhA8WC4In6z1UIgQI1tj1kHB4/6HiiGD3ohBUERju6ODoGC5B3OKQcCQfLLu7t48BmF1rPNN
|
||||
PQ8/hZ2x4r3o87xycGcMuaUMQ6/Guvw0e2ysdExf77GxR2nQNTW8hX210z2cgL2Fb8Yq7H+INJ+i7/8D
|
||||
i+nyJVO3bVgAAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
Reference in New Issue
Block a user