2011-12-17 27 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

したがって、ユーザーはフォーム上の画像ボックスをドラッグできますか?どのスクロールバーについて話していますか? –

+0

@ JohnArlen。いいえ、私のピクチャボックスは、オートスクロールをtrueに設定したパネルにあり、画像がパネルよりも大きい場合はスクロールバーが表示されます。マウスを動かすと、手書きカーソルを持っているときに、Acrobarのリーダーのように、パネルの境界内で絵文字を動かします。しかし、私のscorbarsは正常に動作しません、彼らは他の側にのみ広がって、かわいいから移動しないでください。提案はありますか? – gormit

+0

私は正直なところ、まだ明快さが必要だと感じています...あなたが探しているもの。アクロバットリーダーやGoogleマップのように、マウスで画像を保持してドラッグすると、スクロールバーが機能するようにしたいですか? – Sandy

答えて

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つの注:スライダーが移動した場合(pictureBoxを移動スライダーで移動されるように)、その後、画面上の同じ点が座標pictureBox1に対してだ変化する

  1. 注意。したがって、画面座標(e.Locationの代わりにControl.MousePosition)を使用します。 panel1.AutoScrollPositionを変更

  2. mouseCursorpictureBox相対的な移動を引き起こし、そのpictureBox1.MouseMoveイベントは、カーソルが画面上で移動していない場合でも、再起動されます。 _StartPoint = Control.MousePositionを追加すると、不要なスクロールを防ぐことができます。

関連する問題