在C# Winform中,实现Picture的拖动可以通过以下步骤:

  1. 在窗体中添加一个PictureBox控件,并设置其AllowDrop属性为true。
  2. 在PictureBox的MouseDown事件中,记录鼠标按下时的坐标。
  3. 在PictureBox的MouseMove事件中,判断鼠标左键是否按下,如果按下则计算鼠标移动的距离,并将PictureBox的Location属性设置为当前位置加上移动距离。
  4. 在PictureBox的DragEnter事件中,判断拖拽的数据是否为图片格式,如果是则允许拖拽。
  5. 在PictureBox的DragDrop事件中,获取拖拽的图片,并将其显示在PictureBox中。

以下是示例代码:

复制代码private Point mouseOffset;

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        mouseOffset = new Point(-e.X, -e.Y);
    }
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        Point mousePos = Control.MousePosition;
        mousePos.Offset(mouseOffset.X, mouseOffset.Y);
        pictureBox1.Location = pictureBox1.Parent.PointToClient(mousePos);
    }
}

private void pictureBox1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
        if (Path.GetExtension(files[0]).ToLower() == ".jpg" || Path.GetExtension(files[0]).ToLower() == ".png")
        {
            e.Effect = DragDropEffects.Copy;
        }
    }
}

private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
    pictureBox1.Image = Image.FromFile(files[0]);
}