如何在单击按钮时绘制矩形

本文关键字:绘制 按钮 单击 | 更新日期: 2023-09-27 17:55:53

我希望当我单击按钮时,在表单
中添加一个矩形我可以在表单中添加我想要多少的油漆,但我无法通过单击按钮添加矩形等形状,我搜索了它,但没有找到解决方案
这里有人知道怎么做吗?

这是我在形式绘画中的代码

    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事件,通常的方法是调用Form类的Invalidate()方法。事实上,无效是一种控制方法。但是FormControl 派生,所以我们也可以访问Form的方法。

因此,在 Windows 窗体中触发重绘的正确方法是将订阅放入 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);
    }
}

要调用方法,您需要括号。

private void button1_Click(object sender, EventArgs e)
{
    Form1_Paint(sender, e);
}