C#.net ListView item 拖动排序实现方法
时间: 2024-01-11 18:02:36 浏览: 117
用C#实现在ListBox中拖动排序
5星 · 资源好评率100%
实现 ListView item 的拖动排序,可以参考以下步骤:
1. 开启 ListView 的拖放功能:
```csharp
listView1.AllowDrop = true;
```
2. 在 ListViewItem 的 MouseDown 事件中,记录当前被拖动项的索引:
```csharp
private int dragIndex;
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
dragIndex = listView1.FocusedItem.Index;
}
```
3. 在 ListViewItem 的 ItemDrag 事件中,开始拖动操作,使用 DoDragDrop 方法传递数据:
```csharp
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
listView1.DoDragDrop(e.Item, DragDropEffects.Move);
}
```
4. 在 ListView 的 DragEnter 事件中,判断拖入的数据是否为 ListViewItem,设置拖放效果为移动:
```csharp
private void listView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(ListViewItem)))
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
}
```
5. 在 ListView 的 DragOver 事件中,更新被拖动项的位置,设置拖放效果为移动:
```csharp
private void listView1_DragOver(object sender, DragEventArgs e)
{
Point point = listView1.PointToClient(new Point(e.X, e.Y));
ListViewItem item = listView1.GetItemAt(point.X, point.Y);
if (item != null)
{
int dropIndex = item.Index;
if (dropIndex != dragIndex)
{
listView1.Items.RemoveAt(dragIndex);
listView1.Items.Insert(dropIndex, listView1.Items[dragIndex]);
dragIndex = dropIndex;
}
}
e.Effect = DragDropEffects.Move;
}
```
6. 在 ListView 的 DragDrop 事件中,完成拖放操作:
```csharp
private void listView1_DragDrop(object sender, DragEventArgs e)
{
ListViewItem item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;
Point point = listView1.PointToClient(new Point(e.X, e.Y));
ListViewItem dropItem = listView1.GetItemAt(point.X, point.Y);
int dropIndex = dropItem != null ? dropItem.Index : listView1.Items.Count;
listView1.Items.Insert(dropIndex, item);
}
```
通过以上步骤,即可实现 ListView item 的拖动排序功能。
阅读全文