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)e.Data.GetData(typeof(string)); 图形 g = pictureBox1.CreateGraphics(); SizeF size = g.MeasureString(data, Font); 根据用户选择将数据放置在前面或后面 // ... g.DrawString(data, Font, Brushes.Black, new PointF(x, y)); }该代码如何优化可以实现将从listview上拖拽的数据放到想放到的位置,并且可以放到已经被拖拽数据的前面或者后面
时间: 2023-05-14 22:07:11 浏览: 180
PictureBox实现拖拽操作
5星 · 资源好评率100%
这段代码可以通过使用ListView控件的DragDrop事件来实现更好的优化。在DragDrop事件中,可以使用ListView控件的Insert方法将拖拽的数据插入到指定位置。具体实现可以参考以下代码:
private void listView1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(string)))
{
e.Effect = DragDropEffects.Copy;
}
}
private void listView1_DragDrop(object sender, DragEventArgs e)
{
string data = (string)e.Data.GetData(typeof(string));
Point point = listView1.PointToClient(new Point(e.X, e.Y));
ListViewItem item = listView1.GetItemAt(point.X, point.Y);
int index = item != null ? item.Index : listView1.Items.Count;
listView1.Items.Insert(index, data);
}
在这段代码中,我们使用ListView控件的PointToClient方法将拖拽事件的坐标转换为ListView控件内部的坐标,然后使用ListView控件的GetItemAt方法获取拖拽位置上的ListViewItem项,如果获取到了,则将新数据插入到该项的前面,否则将新数据插入到ListView控件的末尾。
阅读全文