我想在单击按钮时向表单中添加一个矩形,
我可以在表单绘画中添加多少,但是我无法通过单击按钮添加矩形之类的形状,因此我对其进行了搜索,但没有找到解决方案
这里有人知道怎么做吗?
这是我在窗体绘画中的代码
private void Form1_Paint(object sender, PaintEventArgs e)
{
locationX = locationX + 20;
locationY = locationY + 20;
e.Graphics.DrawRectangle(Pens.Black,
new Rectangle(10 + locationX, 10 + locationY, 50, 30));
}
这是我的按钮代码
private void button1_Click(object sender, EventArgs e)
{
this.Paint += Form1_Paint;
}
但是当我单击按钮时它不起作用。为什么它不起作用?
线
this.Paint += Form1_Paint;
将Paint
您的窗体的事件与您的函数Form1_Paint相关联。它不会触发它。这是您只想执行1次的操作,而不是每次按下按钮时都要执行的操作。
要触发Paint
事件,通常的方法是调用类的Invalidate()
方法Form
。实际上,Invalidate是Control的一种方法。但是Form
源自Control
,因此我们也可以访问该方法Form
。
因此,在Windows窗体中触发重新绘制的正确方法是将subscription放入Load方法中:
private void Form1_Load(object sender, EventArgs e)
{
this.Paint += Form1_Paint;
}
它应该已经隐藏在自动生成的代码中。您的方法Form1_Paint
还可以。
最后,按钮单击方法应为:
private void button1_Click(object sender, EventArgs e)
{
this.Invalidate(); // force Redraw the form
}
从文档:
Invalidate():使控件的整个表面无效,并使控件重绘。
编辑 :
使用此方法,一次只能绘制1个矩形,因为整个表面都被重绘,因此该表面被完全擦除,然后它仅绘制您在Form1_Paint方法中要求的内容。
对于如何绘制多个矩形的答案,您应该创建一个矩形列表。在每个单击按钮处,将“矩形”添加到列表中,然后重新绘制所有矩形。
List<Rectangle> _rectangles = new List<Rectangle>();
private void button1_Click(object sender, EventArgs e)
{
locationX = locationX + 20;
locationY = locationY + 20;
var rectangle = new Rectangle(locationX, locationY, 50, 30));
this._rectangles.Add(rectangle);
this.Invalidate(); // force Redraw the form
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
foreach(var rectangle in this._rectangles)
{
e.Graphics.DrawRectangle(Pens.Black, rectangle);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句