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

gor*_*mit 2 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);
            }
    }
Run Code Online (Sandbox Code Playgroud)

Lar*_*ech 12

我认为你需要更改AutoScrollPosition父面板,而不是与玩耍Location的点PictureBox.毕竟,父面板的滚动条已经处理了该位置PictureBox.

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

private Point _StartPoint;

void pictureBox1_MouseDown(object sender, MouseEventArgs e) {
  if (e.Button == MouseButtons.Left)
    _StartPoint = e.Location;
}

void pictureBox1_MouseMove(object sender, MouseEventArgs e) {
  if (e.Button == MouseButtons.Left) {
    Point changePoint = new Point(e.Location.X - _StartPoint.X, 
                                  e.Location.Y - _StartPoint.Y);
    panel1.AutoScrollPosition = new Point(-panel1.AutoScrollPosition.X - changePoint.X,
                                          -panel1.AutoScrollPosition.Y - changePoint.Y);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 非常适合我。非常感谢。 (2认同)