-3

我创建了一个 Windows 窗体应用程序,我想在单击按钮时绘制一个形状。如何在 Button_Click 事件上调用 Form_Paint?

4

2 回答 2

0

这是一个将每个“形状”作为 GraphicsPath 存储在类级别列表中的快速示例。每个路径都是使用表单的 Paint() 事件中提供的 Graphics 绘制的。每次单击按钮时都会将一个随机矩形添加到 List<> 中,并针对表单调用 Refresh() 以强制其重绘自身:

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        this.Paint += new PaintEventHandler(Form1_Paint);
    }

    private Random R = new Random();
    private List<System.Drawing.Drawing2D.GraphicsPath> Paths = new List<System.Drawing.Drawing2D.GraphicsPath>();

    private void button1_Click(object sender, EventArgs e)
    {
        Point pt1 = new Point(R.Next(this.Width), R.Next(this.Height));
        Point pt2 = new Point(R.Next(this.Width), R.Next(this.Height));

        System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath();
        shape.AddRectangle(new Rectangle(new Point(Math.Min(pt1.X,pt2.X), Math.Min(pt1.Y, pt2.Y)), new Size(Math.Abs(pt2.X - pt1.X), Math.Abs(pt2.Y - pt1.Y))));
        Paths.Add(shape);

        this.Refresh();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics G = e.Graphics;
        foreach (System.Drawing.Drawing2D.GraphicsPath Path in Paths)
        {
            G.DrawPath(Pens.Black, Path);
        }
    }

}
于 2013-06-29T19:45:39.960 回答
0

要手动提高油漆,请阅读此 SO 帖子(基本上调用 Invalidate() 方法)

SO post:我如何调用绘画事件?

但是,您可能需要在按钮单击时设置/清除某种内部“drawshape”标志,并检查您的paint even 处理程序方法。此标志将告诉您的绘制事件处理程序继续绘制您的形状或根本不绘制您的形状(每次调用表单绘制时)

于 2013-06-29T19:46:32.947 回答