从listview拖拽到picturebox上的数据使用drawing方法显示出来后,如何计算该数据的坐标
时间: 2023-05-16 20:05:10 浏览: 100
您可以使用以下代码来计算数据的坐标:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (draggedData != null)
{
// 获取鼠标在图片框中的位置
Point mouseLocation = pictureBox1.PointToClient(Cursor.Position);
// 计算数据在图片框中的位置
Point dataLocation = new Point(mouseLocation.X - dragOffset.X, mouseLocation.Y - dragOffset.Y);
// 绘制数据
e.Graphics.DrawImage(draggedData, dataLocation);
}
}
其中,draggedData 是从 listview 拖拽到 picturebox 上的数据,dragOffset 是鼠标相对于数据的偏移量。
相关问题
从listview上拖拽到picturebox上的数据显示出来后,如何取picturebox上该数据的坐标
您可以使用 PictureBox 的 MouseDown 和 MouseMove 事件来获取拖拽操作的起始和结束坐标,然后使用 PointToClient 方法将坐标转换为 PictureBox 内部的坐标系。以下是示例代码:
private Point startPoint;
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
startPoint = Cursor.Position;
listView1.DoDragDrop(e.Item, DragDropEffects.Copy);
}
private void pictureBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(ListViewItem)))
{
e.Effect = DragDropEffects.Copy;
}
}
private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
Point endPoint = pictureBox1.PointToClient(new Point(e.X, e.Y));
ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
// 使用 startPoint 和 endPoint 来计算拖拽的偏移量
int offsetX = endPoint.X - startPoint.X;
int offsetY = endPoint.Y - startPoint.Y;
// 在 PictureBox 上显示数据
Graphics g = pictureBox1.CreateGraphics();
g.DrawString(item.Text, Font, Brushes.Black, endPoint.X, endPoint.Y);
}
如果将listview中的值比如111拖拽到picturebox上并且使用drawstring的方法显示出来后,如何在picturebox上继续拖拽移动111,代码该如何实现
您可以使用鼠标事件来实现在picturebox上拖拽移动111。具体实现方法如下:
1. 在picturebox的MouseDown事件中记录鼠标按下时的坐标和拖拽的值(111)。
2. 在picturebox的MouseMove事件中判断鼠标是否按下,如果按下则计算鼠标移动的距离,并将拖拽的值(111)绘制到新的位置上。
3. 在picturebox的MouseUp事件中清除拖拽的值(111)。
以下是示例代码:
private int dragValue;
private Point dragStart;
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
dragValue = (int)listView1.SelectedItems[0].Tag;
listView1.DoDragDrop(dragValue, DragDropEffects.Move);
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
dragStart = e.Location;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int dx = e.X - dragStart.X;
int dy = e.Y - dragStart.Y;
Graphics g = pictureBox1.CreateGraphics();
g.DrawString(dragValue.ToString(), Font, Brushes.Black, e.X, e.Y);
dragStart = e.Location;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
dragValue = 0;
}
阅读全文