如何在C#中移动PictureBox?

时间:2012-03-21 13:27:40

标签: c# .net winforms picturebox

我已使用此代码移动pictureBox_MouseMove事件

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

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

3 个答案:

答案 0 :(得分: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变量。移动控件后需要更改鼠标光标的相对位置。

答案 1 :(得分:4)

你必须做几件事

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

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

  3. MouseUp

  4. 中注册移动操作的结尾
    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;
        }
    }
    

答案 2 :(得分:0)

尝试将SizeMode属性从AutoSize更改为Normal