当我点击表单时,我正在编写一个程序,我需要在表单上绘制矩形图形。我创建了代码(下面),但是当我调整表单大小时,矩形会被删除。
如何在调整表单大小时保留绘制的矩形?
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 :(得分: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事件中调用所有痛苦对象。