アプリケーションの実行時にフォーム上に表示されている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など別の値が定義されている場合があります。この場合は引数の値の意味も変わってくるため、コントロールに合わせて座標計算を行ってください。

カテゴリー : c#

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)