将listview中的值拖拽到picturebox的背景上,不创建其他控件的情况下,最多一行可以放三个值,超过三个后往第二行放置该如何实现,是否可以提供参考代码
时间: 2023-05-11 15:06:41 浏览: 149
可以使用DragDrop事件来实现将listview中的值拖拽到picturebox的背景上。在DragDrop事件中,可以通过计算鼠标位置和picturebox的位置来确定拖拽的值应该放置在哪个位置。如果超过三个后需要换行,可以通过计算当前行已经放置了多少个值来确定是否需要换行。以下是参考代码:
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 p = pictureBox1.PointToClient(new Point(e.X, e.Y));
int x = p.X;
int y = p.Y;
int row = y / 50; //每行高度为50
int col = x / 100; //每列宽度为100
int index = row * 3 + col; //计算当前位置在listview中的索引
if (index < listView1.Items.Count)
{
ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
pictureBox1.CreateGraphics().DrawString(item.Text, Font, Brushes.Black, x, y);
//判断是否需要换行
if (col == 2)
{
y += 50;
x = 0;
}
else
{
x += 100;
}
}
}
注意:以上代码仅供参考,可能需要根据具体情况进行修改。
阅读全文