private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { ListViewItem item = (ListViewItem)e.Item; string itemName = item.Text; listView1.DoDragDrop(itemName, DragDropEffects.Copy); }将listview中的值比如说111,拖拽到picturebox中显示出来后,继续拖拽listview的值222,使其可以选择放置的位置,即鼠标按下时在已经放置的数据111的前面,222就显示在111的前面,如果鼠标按下时在111的后面,222就显示在111的后面,代码该如何实现,是在picturebox中计算拖过去图片的大小来实现移动的吗
时间: 2023-05-14 08:07:30 浏览: 92
ListView的item拖动
可以使用DragEnter和DragDrop事件来实现这个功能。在DragEnter事件中,判断拖拽的数据是否是listview中的数据,如果是,则设置允许拖放的效果为Copy。在DragDrop事件中,获取拖拽的数据,将其添加到picturebox中,并根据鼠标按下的位置来确定插入的位置。
以下是示例代码:
private void pictureBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(string)))
{
e.Effect = DragDropEffects.Copy;
}
}
private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
string itemName = (string)e.Data.GetData(typeof(string));
int index = GetInsertIndex(itemName, e.X, e.Y);
// 在指定位置插入数据
// ...
}
private int GetInsertIndex(string itemName, int x, int y)
{
// 计算插入位置
// ...
return index;
}
需要注意的是,计算插入位置的方法需要根据具体情况来实现,可以根据鼠标按下的位置和已有数据的位置来判断插入的位置。另外,拖拽过程中可以在picturebox中显示一个半透明的图标来表示拖拽的数据,这可以通过设置DragDropEffects的值来实现。
阅读全文