アプリケーションの実行時にフォーム上に表示されているpictureBoxをDragできるようにします。
基本的な考えとしてはpictureBox1_MouseMoveイベントに割り当てられたコード内で移動量に合わせてPictureBox1の座標を増減させます。この時、pictureBoxがクリックされた事を判定するための変数を定義します。この変数が無いとカーソルがPictureBox上を移動するたびに一緒に動いてしまいます。
また、最初にクリックした座標を保存する事で「クリックした位置からの移動量」を計算します。
private boolean isMouseDown = false; //クリック中かどうか判別 MouseDownでtrue、MouseUpでfalse int mouse_pos_x; //クリックされたX座標 int mouse_pos_y; //クリックされたy座標 private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { ((PictureBox)sender).BringToFront(); //クリックした画像を最前面に移動 isMouseDown = true; //マウスが押し下げられた mouse_pos_x = e.X; //クリックされたx座標 mouse_pos_y = e.Y; //クリックされたy座標 } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { // [ object sender ] はこのイベントが発生したコントロールオブジェクト // この場合はpictureBox1 // [ MouseEventArgs e ] は int dx; int dy; if (isMouseDown == true) { dx = e.X - mouse_pos_x; //前回からの移動量を計算 dy = e.Y - mouse_pos_y; ((PictureBox)sender).Left += dx; ((PictureBox)sender).Top += dy; } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { isMouseDown = false; }
ちなみにコントロールによってはe.Xやe.Yではなく、e.fX、e.fYなど別の値が定義されている場合があります。この場合は引数の値の意味も変わってくるため、コントロールに合わせて座標計算を行ってください。