110,565
社区成员
发帖
与我相关
我的任务
分享
// 这个别忘了
// listView1.AllowDrop = true;
// listView1.AutoArrange = false;
private double getVector(Point pt1, Point pt2) // 获取两点间的距离
{
var x = Math.Pow((pt1.X - pt2.X), 2);
var y = Math.Pow((pt1.Y - pt2.Y), 2);
return Math.Abs(Math.Sqrt(x - y));
}
private void listView1_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(ListViewItem[])))
e.Effect = DragDropEffects.Move;
}
private void listView1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(ListViewItem[])))
{
var items = e.Data.GetData(typeof(ListViewItem[])) as ListViewItem[];
var pos = listView1.PointToClient(new Point(e.X, e.Y));
var offset = new Point(pos.X - startPoint.X, pos.Y - startPoint.Y);
foreach (var item in items)
{
pos = item.Position;
pos.Offset(offset);
item.Position = pos;
}
}
}
Point startPoint = Point.Empty;
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
startPoint = e.Location;
}
private void listView1_MouseMove(object sender, MouseEventArgs e)
{
if (listView1.SelectedItems.Count == 0)
return;
if (e.Button == MouseButtons.Left)
{
var vector = getVector(startPoint, e.Location);
if (vector < 50) return;
var data = listView1.SelectedItems.OfType<ListViewItem>().ToArray();
listView1.DoDragDrop(data, DragDropEffects.Move);
}
}