2012-07-10 40 views
2

我只是试图在鼠标移动事件上绘制一个矩形。我刚刚在MouseDown事件中保存了起始点,而结束点来自Mouse Move。并称为paintImage函数。使用鼠标在c#中绘制矩形

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矩形被绘制...任何人都帮我在这

+0

看看这个帖子:http://stackoverflow.com/questions/4164864/what-is-the-proper-way-to-draw-a-line-with-mouse -in-c-sharp我想那里很简单 – eyossi 2012-07-10 07:05:06

回答

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); 
+0

感谢Buddy ... It's Worked ... – 2012-07-10 07:21:37

2

您需要交换的CAS坐标E中的宽度变负:

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));