单击按钮时调用涉及PaintEventArgs的函数

时间:2016-12-21 21:47:23

标签: c# winforms drawing2d

很抱歉,如果之前有人询问过。

我正在使用C#windows窗体中的一个简单的连接4游戏,因为我之前没有做任何涉及图形的工作。要做到这一点,我需要程序在按下按钮时绘制圆圈但是我不知道如何调用该函数来执行此操作。

public void printToken(PaintEventArgs pe, int x)
    {
        Graphics g = pe.Graphics;
        Pen blue = new Pen(Color.Blue);
        Pen red = new Pen(Color.Red);

        Rectangle rect = new Rectangle(50 + ((x-1) * 100), 50, 50, 50);
        g.DrawEllipse(blue, rect);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        printToken(null, 1);
    }

空位只是一个占位符,显然不起作用。

感谢任何和所有帮助。

2 个答案:

答案 0 :(得分:1)

通常在要进行自定义绘图的Windows窗体应用程序中,您可以直接在Form事件处理程序中的PictureBoxPaint上绘制,也可以创建{{{}的子类1}},其中覆盖Control方法。在OnPaint事件处理程序或Paint中,您可以绘制所有内容(即不只是一个圆圈,而是所有圆圈)。然后,当您的基础数据结构发生变化,表明您需要重新绘制时,您会在控件上调用OnPaint,这会将其标记为需要重绘,并在下一次通过事件循环时调用Invalidate()事件处理程序将运行或将调用您的Paint方法。在该方法中,您将拥有获取OnPaint对象所需的PaintEventArgs对象,您可以使用该对象进行绘制。你不想“画一次并忘记”(例如,当点击一个按钮时),因为有各种各样的东西可能导致你的控件需要重绘自己。有关详细信息,请参阅this question and answer

编辑:这里有一些回应您的评论。 (这将是一个评论,但它太长了。)

如果我暂时假设您在Visual Studio的Windows窗体设计器中以空白Graphics开头,那么最快捷的方法就是选择Form,并在VS中在“属性”窗格中,单击闪电工具栏按钮以查看表单的事件。向下滚动到Form事件,然后双击标签右侧空白处的任意位置。这将为表单连接一个Paint事件处理程序,并将您带到表单代码文件中新添加的方法。使用名为Paint的{​​{1}}对象进行绘制。然后,如果您需要更改在点击按钮时绘制的内容,请在您的点击处理程序中更改确定绘制内容的数据(例如,游戏块的位置和颜色),并在完成后调用{{1 }}

答案 1 :(得分:0)

如果将表示单个芯片的UserControl添加到表单中,并覆盖OnPaint方法并将着色代码放入该事件中,则当Paint事件触发时,Graphics对象将不为null。

要启动UserControl的绘制,请调用Refresh方法或InvalidateRectangle方法 - 将触发OnPaint方法。

确保首先将类层次结构调用到OnPaint,以确保首先绘制对象的背景:

protected override void OnPaint(PaintEventArgs e) {
    base.OnPaint(e);
    Graphics g = e.Graphics;
        Pen blue = new Pen(Color.Blue);
        Pen red = new Pen(Color.Red);
        Rectangle rect = new Rectangle(50 + ((x-1) * 100), 50, 50, 50);
        g.DrawEllipse(blue, rect);

}