将listview中的值比如说111,拖拽到picturebox中显示出来后,继续拖拽listview的值222,使其可以选择放置的位置,即鼠标按下时在已经放置的数据111的前面,222就显示在111的前面,如果鼠标按下时在111的后面,222就显示在111的后面,代码该如何实现
时间: 2023-05-14 17:07:26 浏览: 39
您可以使用DragDrop事件来实现这个功能。首先,您需要在ListView和PictureBox上启用AllowDrop属性。然后,您可以使用ListView的ItemDrag事件来开始拖动操作,并在PictureBox的DragEnter和DragDrop事件中处理拖放操作。
以下是示例代码:
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
listView1.DoDragDrop(e.Item, DragDropEffects.Move);
}
private void pictureBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(ListViewItem)))
{
e.Effect = DragDropEffects.Move;
}
}
private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
Point point = pictureBox1.PointToClient(new Point(e.X, e.Y));
ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
int index = GetInsertionIndex(point);
listView1.Items.Remove(item);
listView1.Items.Insert(index, item);
}
private int GetInsertionIndex(Point point)
{
int index = -1;
for (int i = 0; i < listView1.Items.Count; i++)
{
Rectangle bounds = listView1.GetItemRect(i, ItemBoundsPortion.Entire);
if (bounds.Contains(point))
{
index = i;
break;
}
}
if (index == -1)
{
index = listView1.Items.Count;
}
return index;
}
在上面的代码中,GetInsertionIndex方法用于确定要插入ListView中的项目的索引位置。它遍历所有项目并检查鼠标指针是否在项目的边界框内。如果是,则返回该项目的索引。如果没有找到匹配的项目,则返回ListView的末尾索引。
请注意,这只是一个简单的示例,您可能需要根据您的具体需求进行修改。