如何在C#中移动PictureBox?

问题描述 投票:0回答:4

我使用此代码在

pictureBox_MouseMove
事件

上移动图片框
pictureBox.Location = new System.Drawing.Point(e.Location);

但是当我尝试执行时,图片框闪烁并且无法识别确切位置。你们能帮我吗?我希望图片框能稳定...

c# .net winforms picturebox
4个回答
5
投票

您想要将控件移动鼠标移动的量:

    Point mousePos;

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
        mousePos = e.Location;
    }

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) {
            int dx = e.X - mousePos.X;
            int dy = e.Y - mousePos.Y;
            pictureBox1.Location = new Point(pictureBox1.Left + dx, pictureBox1.Top + dy);
        }
    }

请注意,此代码更新MouseMove中的mousePos变量。 这是必要的,因为移动控件会改变鼠标光标的相对位置。


4
投票

你必须做几件事

  1. MouseDown
    中注册移动操作的开始,并记住鼠标的开始位置。

  2. MouseMove
    中查看您是否确实在移动图片。通过与图片框的左上角保持相同的偏移量来移动,即在移动时,鼠标指针应始终指向图片框内的同一点。这使得图片框随着鼠标指针一起移动。

  3. MouseUp
    中登记移动操作的结束。

private bool _moving;
private Point _startLocation;

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    _moving = true;
    _startLocation = e.Location;
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    _moving = false;
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (_moving) {
        pictureBox1.Left += e.Location.X - _startLocation.X;
        pictureBox1.Top += e.Location.Y - _startLocation.Y;
    }
}

0
投票

尝试将

SizeMode
属性从
AutoSize
更改为
Normal


0
投票

我只是将发送者投射到图片框并使用MouseEventArgs,注意鼠标的位置成为图片框的左上角位置。

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            var pictureBox = (PictureBox)sender;
            pictureBox.Location = new Point(pictureBox.Left + e.X, pictureBox.Top + e.Y);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.