繁体   English   中英

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

[英]How to keep graphics when resizing C# form

我正在编写一个程序,当我单击表单时,我需要在表单上绘制矩形图形。 我创建了代码来执行此操作(下面) ,但是当我调整表单大小时,矩形将被删除。

在调整表单大小时,如何保留绘制的矩形?

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

你可以这样做:

    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形状)。

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

干杯

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM