2017-08-06 58 views
0

我有pictureBox单击事件。我得到点击的坐标并尝试绘制圆圈:如何通过点击坐标绘制矩形?

private void pictureMain_Click(object sender, EventArgs e){ 

    MouseEventArgs me = (MouseEventArgs)e; 

    Point coordinates = me.Location; 
    int x = coordinates.X; 
    int y = coordinates.Y; 

    // Create pen. 
    Pen blackPen = new Pen(Color.Red, 2); 

    // Create rectangle for ellipse. 
    Rectangle rect = new Rectangle(x, y, 50, 50); 

    g.DrawEllipse(blackPen, rect); 

    } 

但它绘制的圆形不是在picturebox的坐标(x,y)中。它放置在另一个地方。

+1

'DrawEllipse'确实绘制了一个椭圆形,这并不奇怪,坐在一个边框内。如果你想画一个以点击位置为中心的矩形,可以使用'g.DrawRectangle(blackPen,x-w/2,y -w/2,w,w);'其中'int w = 50;' - 其他问题; :>> g从哪里来?一个缓存的Graphics对象?坏,坏,坏。 >>要直接访问位置代码的MouseClick事件! ; >>如果您创建了Pen Dispose,或者您泄露了gdi资源! ' – TaW

+0

你可以用代码设计这个答案吗? – Daniel

+0

不,这真的不够清楚,无法知道你真正想要什么(矩形是否会持续?然后仅在绘画事件中绘制) - 也不值得回答。 – TaW

回答

2

试试这个:

private void pictureBox1_Click (object sender, EventArgs e) 
{ 
    Point ellipseCenter = ((MouseEventArgs) e).Location; 
    Size ellipseSize = new Size (50, 50); 

    Point rectPosition = new Point (ellipseCenter.X - ellipseSize.Width/2, ellipseCenter.Y - ellipseSize.Height/2); 
    Rectangle rect = new Rectangle (rectPosition, ellipseSize); 

    using (Graphics grp = Graphics.FromImage (pictureBox1.Image)) 
    { 
     grp.DrawEllipse (Pens.Red, rect); 
    } 

    pictureBox1.Refresh(); 
}