2012-09-19 83 views
0

我正在制作一个程序,当我单击窗体时需要将矩形图形绘制到窗体本身上。我创建代码来做到这一点(下),但是当我调整窗体的大小时,矩形被删除。如何在调整C#窗体大小时保留图形

如何在窗体大小调整时保留绘制的矩形?

private void Form1_MouseClick(object sender, MouseEventArgs e) 
{ 
    Graphics g = this.CreateGraphics(); 
    Pen Haitham = new Pen(Color.Silver, 2); 
    g.FillRectangle(Haitham.Brush, new Rectangle(e.X, e.Y, 50, 50)); 
} 
+0

正如其他人指出的那样,使用Paint事件绘制图形。这里是一些额外的信息:http://www.bobpowell.net/picturebox.htm –

回答

1

你可以这样做,而不是:

private List<Point> _points = new List<Point>(); 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     foreach(Point point in _points) 
     { 
      using (Pen Haitham = new Pen(Color.Silver, 2)) 
      { 
       e.Graphics.FillRectangle(Haitham.Brush, new Rectangle(point.X, point.Y, 50, 50)); 
      } 
     } 
    } 

    private void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     _points.Add(new Point(e.X, e.Y)); 
     Invalidate(); // could be optimized to invalidate only the future rectangle draw 
    } 

在Windows中使用的WinForms(或本地Windows),你应该重写的OnPaint并做几乎所有的涂料逻辑存在。你可以编写一个添加元素的场景(例如在这里你可以为Canvas添加一个Rectangle形状)。

+0

请你澄清这段代码为什么我应该这样做?这个想法是什么? –

+0

重写OnPaint是执行自定义呈现的标准方式。有关更多信息,请参阅官方文档:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.paint(v=vs.100).aspx –

1

您必须在"Paint"事件中执行"Graphics"事件。然后,您可以始终看到您的矩形,因为事件在需要使窗口无效时才会触发。

干杯

0

我不是太可怕熟悉的图形,但我假设你需要把所有的绘图对象的放入容器中,并让他们重新绘制在窗体的大小。您可能需要调回sizeChanged事件中的所有paining对象。

相关问题