2

マウス移動イベントで四角形を描画しようとしています。開始点を MouseDown Event に保存し、終了点は Mouse Move からです。そして paintImage Function と呼ばれます。

Rectangle rec = new Rectangle (x1,y1,x2 - x1 , y2 - y1);
G.DrawRectangle(Pens.Blue,rec);

Starting Points = (x1,y1)
Ending Points = (x2,y2)

問題は、x2 の値が x1 より小さい場合、または y2 が y1 より小さい場合、四角形が描画されないことです。

4

2 に答える 2

2

小切手を簡単に書くことができます:

int drawX, drawY, width, height;
if (x1 < x2)
{
    drawX = x1;
    width = x2 - x1;
}
else
{
    drawX = x2;
    width = x1 - x2;
}

if (y1 < y2)
{
    drawY = y1;
    height = y2 - y1;
}
else
{
    drawY = y2;
    height = y1 - y2;
}

Rectangle rec = new Rectangle (drawX, drawY, width, height);
G.DrawRectangle(Pens.Blue,rec);

これは短い形式で書くこともできます:

Rectangle rec = new Rectangle ((x1 < x2) ? x1 : x2, (y1 < y2) ? y1 : y2, (x1 < x2) ? x2 - x1 : x1 - x2, (y1 < y2) ? y2 - y1 : y1 - y2);
G.DrawRectangle(Pens.Blue,rec);
于 2012-07-10T07:15:14.117 に答える
2

幅が負になる場合は、座標を交換する必要があります。

int xpos = (x2-x1 < x1) ? x2 : x1;
int ypos = (y2-y1 < y1) ? y2 : y1;
int width = Math.Abs(x2-x1);
int height = Math.Abs(y2-y1);

G.DrawRectangle(Pens.Blue, new Rectangle(xpos, ypos, width, height));
于 2012-07-10T07:15:24.833 に答える