2011-12-17 211 views
2

當點擊圖片並移動圖片框時,我需要更新滾動條位置。它始終處於開始階段,僅在右側(水平線)和向下(垂直)移動。在鼠標移動時設置自動滾動位置

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); 
      } 
    } 
+0

那麼用戶可以在窗體上拖動圖片框?你在說什麼滾動條? – 2011-12-17 22:13:49

回答

11

我想你需要更改父面板的AutoScrollPosition而不是與PictureBoxLocation點玩耍。畢竟,父面板的滾動條已經在處理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); 
    } 
} 
3

LarsTech的代碼是不100%正確。 2個,注意事項:

  1. 注意,如果移動滑塊,然後在屏幕上同一點改變它的座標相對於pictureBox1(如pictureBox與移動的滑塊移動)。因此我們要使用屏幕座標(Control.MousePosition而不是e.Location)。

  2. 更改panel1.AutoScrollPosition導致pictureBox相對的舉動mouseCursor,所以pictureBox1.MouseMove事件再次被解僱,即使光標沒有在屏幕上移動。添加_StartPoint = Control.MousePosition可防止不必要的滾動。