1

この質問は、ここで見つけることができる私の別の質問に関連していますPictureBox親コンテナ内でa を移動したかったTabPage(違いがある場合)。以下のコードを使用して、移動を行うことができます。

private Point start = Point.Empty; 
private bool _mapPackageIsMoving;    

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; 
} 

今私の問題は、この制御の移動に制限がないことです。TabPageユーザーは、自分のピクチャボックスがその中にある可視領域から数キロ離れたところにコントロールをドラッグできます。このようにイベントを変更して、少なくともタブページの表示領域MouseMoveから出ないようにするために、移動にいくつかの制限を追加しようとしました。LeftRight

void pictureBoxPackageView_MouseMove(object sender, MouseEventArgs e) { 
  if (_mapPackageIsMoving) { 
   //Added condition
  if (pictureBoxPackageView.Left >= 0 && pictureBoxPackageView.Right >= 0)
    pictureBoxPackageView.Location = new Point( 
                             pictureBoxPackageView.Left + (e.X - start.X),  
                             pictureBoxPackageView.Top + (e.Y - start.Y)); 
  } 
} 

しかし、上記のコードの問題は、ピクチャボックスがコンテナの右側または左側に当たり、または が 0 になるたびにLeftRightコントロールを移動できなくなることです。

画像ボックスのコンテナ内でこの動きを制限するためのヘルプ/ヒントがあれば、Left, Right, Top and Bottom感謝します!

4

2 に答える 2

3

ボックスを無条件に移動することができ (現在の場所のテストはありません)、新しい場所には制限があります。

int nx = Math.Min(Math.Max(pictureBoxPackageView.Left + (e.X -start.X),0),pictureBoxPackageView.Parent.Width-pictureBoxPackageView.Width);
int ny = Math.Min(Math.Max(pictureBoxPackageView.Top + (e.Y -start.Y),0),pictureBoxPackageView.Parent.Height-pictureBoxPackageView.Height);

pictureBoxPackageView.Location = new Point(nx,ny);
于 2012-08-17T07:54:09.580 に答える
-2

以下のコードを追加すると、オプションでアイテムを上にスナップせずに移動できると思います。

//- MouseDownLocation.X
 //- MouseDownLocation.Y 

       int nx = Math.Min(Math.Max(label1.Left - MouseDownLocation.X + (e.X - start.X), 0), label1.Parent.Width - label1.Width);
       int ny = Math.Min(Math.Max(label1.Top - MouseDownLocation.Y + (e.Y - start.Y), 0), label1.Parent.Height - label1.Height);
于 2017-05-03T13:16:14.100 に答える