[英]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.