1

PictureBoxの中に がTabPageあり、もちろんこれTabPageは の一部でありTabView、これTabViewは の中にありFormます。ユーザーがこの画像ボックスをタブ ページ内で移動できるようにしてほしい。このために、画像ボックスのMouseDownMouseMoveおよびMouseUpイベントを使用しています。

private void pictureBoxPackageView_MouseDown(object sender, MouseEventArgs e)
{
    if (!_mapPackageIsMoving)
    {
        _mapPackageIsMoving = true;
    }
} 

private void pictureBoxPackageView_MouseMove(object sender, MouseEventArgs e)
{
    if(_mapPackageIsMoving)
    {
        pictureBoxPackageView.Location = MousePosition; //This is not exact at all!
        return;
    }

    //Some other code for some other stuff when picturebox is not moving...
}

private void pictureBoxPackageView_MouseUp(object sender, MouseEventArgs e)
{
    if (_mapPackageIsMoving)
    {
        _mapPackageIsMoving = false; //Mouse button is up, end moving!
        return;
    }
}

しかし、私の問題はMouseMoveイベントにあります。ボタンを押した後にマウスを動かすとすぐに、ピクチャ ボックスがタブ ページの表示領域から飛び出します。

タブ ページの四角形内でのみ移動を処理する方法を知る必要があります。ピクチャ ボックスがタブ ビューの表示領域の外にドラッグされている場合、ユーザーがマウスをタブ ビューの表示四角形内に移動しない限り、それ以上移動するべきではありません。

どんな助け/ヒントも感謝されます!

4

1 に答える 1

3

PictureBox の元の位置を保持する変数が必要です。

HansPassantの回答から変更:

private Point start = Point.Empty;

void pictureBoxPackageView_MouseUp(object sender, MouseEventArgs e) {
  _mapPackageIsMoving = false;
}

void pictureBoxPackageView_MouseMove(object sender, MouseEventArgs e) {
  if (_mapPackageIsMoving) {
    pictureBoxPackageView.Location = new Point(
                             pictureBoxPackageView.Left + (e.X - start.X), 
                             pictureBoxPackageView.Top + (e.Y - start.Y));
  }
}

void pictureBoxPackageView_MouseDown(object sender, MouseEventArgs e) {
  start = e.Location;
  _mapPackageIsMoving = true;
}
于 2012-08-16T20:02:02.577 に答える