如何在按钮上单击绘制矩形?

时间:2015-06-13 19:42:01

标签: c# winforms events drawing

我想点击按钮时,在表格中添加一个矩形
我可以添加形式油漆我想要多少但我不能通过点击按钮添加像矩形的形状,我搜索了它但我没有找到它的解决方案
在这里有人知道怎么做吗?

这是我在表单中的代码

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

但单击按钮时它不起作用。为什么不工作?

2 个答案:

答案 0 :(得分:4)

该行

 this.Paint += Form1_Paint;

将表单的事件Paint与您的函数Form1_Paint相关联。 它不会触发它。这是你想要只做一次的事情,而不是每次按下按钮。

要触发Paint事件,通常的方法是调用Invalidate()类的Form方法。实际上,Invalidate是Control的方法。但是Form来自Control,因此我们也可以访问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
}

From the doc

  

Invalidate():使控件的整个表面无效,导致重绘控件

编辑:

使用此方法,您一次只能绘制一个矩形,因为整个曲面都是重绘的,因此曲面将完全擦除,然后它只绘制您在Form1_Paint方法中提出的内容。

关于如何绘制多个矩形的答案,您应该创建一个矩形列表。在每个单击按钮上,向列表中添加一个Rectangle,然后重绘所有矩形。

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

答案 1 :(得分:-2)

调用你需要使用parenthesys的方法。

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