Winformでコントロールを自由にドラッグ&ドロップする方法
WinFormで、コントロールを自由にドラッグアンドドロップできるようにするには、以下の手順を実行します。
- コントロール上をマウス左ボタンでクリックされた時、マウスカーソルがコントロールの左上隅からの相対位置を取得する。
private Point mouseOffset;
private void Control_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Control control = (Control)sender;
mouseOffset = new Point(e.X, e.Y);
}
}
- その後、コントロール上でマウスを動かすと、マウスの位置に応じてコントロールの新しい位置を計算し、コントロールを新しい位置に移動する。
private void Control_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Control control = (Control)sender;
control.Left = e.X + control.Left - mouseOffset.X;
control.Top = e.Y + control.Top - mouseOffset.Y;
}
}
- 最後に、左マウスボタンをコントロールから離した時、ドラッグを終了する。
private void Control_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Control control = (Control)sender;
control.Capture = false;
}
}
- 上記のコードを自由に移動させたいコントロールに適用します。
// 绑定事件
yourControl.MouseDown += Control_MouseDown;
yourControl.MouseMove += Control_MouseMove;
yourControl.MouseUp += Control_MouseUp;
そうすると、ユーザーがコントロール上で左クリックを押下して移動すると、コントロールはマウスの移動位置に合わせて自由にドラッグできる。