0

マウスを使用してpictureBoxを移動したいので、ここまで取得しました:

    private void pictureB_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImage(image, recLoc);
    }
    private void pictureB_MouseDown(object sender, MouseEventArgs e)
    {
        WorkAble = true;
        choosingPoint.X = e.X;
        choosingPoint.Y = e.Y; 
        lastPoint.X = e.X;
        lastPoint.Y = e.Y;
    }

    private void pictureB_MouseMove(object sender, MouseEventArgs e)
    {
        if (WorkAble)
        {
            recLoc.X = e.X - choosingPoint.X;// + lastPoint.X;
            recLoc.Y = e.Y - choosingPoint.Y;// + lastPoint.Y;
            pictureB.Refresh();
        }
    }

    private void pictureB_MouseUp(object sender, MouseEventArgs e)
    {
        WorkAble = false;
        lastPoint.X = e.X;
        lastPoint.Y = e.Y;
    }
    // recLoc = pictureBox Location.

まあ、それはうまく機能します..しかし、完全ではありません..つまり、KeyUpイベントが実行され、もう一度クリックすると、画像はpictureBoxの0、0ポイントに戻ります。それを克服するために、lastPoint ポイントを追加し、マウスの移動でその値を追加しました。したがって、一方では最後にドロップしたポイントに画像を描画しますが、マウスは画像の0、0ポイントにあり、クリックした場所ではありません-画像上。画像の中心をクリックすると、マウスは 0, 0 ポイントになります..

それを修正する方法はありますか?

4

2 に答える 2

1

元の場所が失われないように、「recLoc」に段階的な変更を加えます。

private void pictureB_MouseMove(object sender, MouseEventArgs e)
{
    if (WorkAble)
    {
        recLoc.X = recLoc.X + e.X - choosingPoint.X;
        recLoc.Y = recLoc.Y + e.Y - choosingPoint.Y;
        choosingPoint = e.Location;
        pictureB.Invalidate();
    }
}
于 2013-01-25T13:02:54.677 に答える