在鼠标移动时设置自动滚动位置

时间:2011-12-17 09:25:12

标签: c# winforms

当我点击图片并移动图片框时,我需要更新滚动条位置。它总是在开始时,它只在右侧(水平)和向下(垂直)移动。

    private void pictureBox1_MouseMove_1(object sender, MouseEventArgs e)
    {

            ....

            Point currentMousePos = e.Location;
            int distanceX = currentMousePos.X - mouseX;
            int distanceY = currentMousePos.Y - mouseY;
            int newX = pictureBox1.Location.X + distanceX;
            int newY = pictureBox1.Location.Y + distanceY;

            if (newX + pictureBox1.Image.Width + 10 < pictureBox1.Image.Width && pictureBox1.Image.Width + newX + 10 > panel1.Width)
            {
                pictureBox1.Location = new Point(newX, pictureBox1.Location.Y);
            }
            if (newY + pictureBox1.Image.Height + 10 < pictureBox1.Image.Height && pictureBox1.Image.Height + newY + 10 > panel1.Height)
            {
                pictureBox1.Location = new Point(pictureBox1.Location.X, newY);
            }
    }

2 个答案:

答案 0 :(得分:12)

我认为您需要更改父面板的AutoScrollPosition,而不是使用Location的{​​{1}}点。毕竟,父面板的滚动条已经在处理PictureBox

的位置

尝试这样的事情(顺便说一句,我的代码只在按下按钮时执行此操作,否则,我认为这将是一个奇怪的用户界面设计):

PictureBox

答案 1 :(得分:3)

LarsTech的代码不是100%正确。 2注意事项:

  1. 请注意,如果移动滑块,则屏幕上的相同点会更改其相对于pictureBox1的坐标(随着移动的滑块移动pictureBox)。因此,我们希望使用屏幕坐标(Control.MousePosition代替e.Location)。

  2. 更改panel1.AutoScrollPosition会导致pictureBox相对于mouseCursor的移动,因此pictureBox1.MouseMove事件会再次触发,即使光标没有移动到屏幕。添加_StartPoint = Control.MousePosition可防止不必要的滚动。