如何在调整C#表单时保留图形

时间:2012-09-19 15:00:03

标签: 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));
}

3 个答案:

答案 0 :(得分: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
    }

在带有Winforms(或原生Windows)的Windows中,您应该覆盖OnPaint并在那里执行几乎所有的绘制逻辑。

注意WPF,它会有所不同,你会组成一个向它添加元素的场景(例如,你可以在Canvas中添加一个Rectangle形状)。

答案 1 :(得分:1)

您必须在"Graphics"事件中执行"Paint"项内容。然后你总能看到你的矩形,因为只要窗口需要使绘画无效,事件就会触发。

干杯

答案 2 :(得分:0)

我对图形并不是非常熟悉,但我假设您需要将所有绘图对象放入容器中,并在表单大小时重绘它们。您可能需要在sizeChanged事件中调用所有痛苦对象。