如何从单击事件调用绘制方法

本文关键字:调用 绘制 方法 事件 单击 | 更新日期: 2023-09-27 18:05:08

我遇到的问题是,如果我试图在button1_Click方法中使用它们,我无法获得"e.g graphics"代码行。因此,我构造了"Paint"方法。现在我似乎不能从按钮Click事件调用Paint方法。有办法做到这一点吗?我还没能找到一个方法来解决这个问题。或者,是否有一种方法可以在"button1_Click"方法中执行e.Graphics函数?

谢谢

    public void button1_Click(object sender, EventArgs e)
    {
        CrochetPtrnDesign_Paint(this, ?);
    }
    private void CrochetPtrnDesign_Paint(object sender, PaintEventArgs e)
    {
        Rectangle rect = new Rectangle(5, 5,
            ClientSize.Width - 10, ClientSize.Height - 10);
        e.Graphics.DrawRectangle(Pens.Red, rect);
        using (Font font = new Font("Times New Roman", 16, GraphicsUnit.Pixel))
        {
            using (StringFormat sf = new StringFormat())
            {
                // Middle.
                sf.LineAlignment = StringAlignment.Center;  // Middle.
                // Middle/Center.
                sf.Alignment = StringAlignment.Center;      // Center.
                e.Graphics.DrawString("Middle/Center", font, Brushes.Black, rect, sf);
            }
        }

如何从单击事件调用绘制方法

案例一:绘图到Controls:

如果Paint事件实际上是连接到,而不仅仅是您复制的一段代码,这将完成工作:

public void button1_Click(object sender, EventArgs e)
{
    CrochetPtrnDesign.Invalidate();
}

更新:因为我们现在知道CrochetPtrnDesignForm,所以简单地写:this.Invalidate(); !

如果对勾搭有疑问,请阅读这篇文章!

请注意,创建真正有效的PaintEventArgs应该只由系统来完成。

情况二:绘制位图:

要绘制Bitmap,您还需要一个有效的Graphics对象,但您必须自己创建它:

void DrawStuff(Bitmap bmp)
{
    using (Graphics g = Graphics.FromImage(bmp))
    {
        // draw your stuff
        g.DrawRectangle(...);
    }
    // when done maybe assign it back into a Control..
    pictureBox.Image = bmp;
}

更新:

将位图分配给pictureBox.Image将有效,但有泄漏先前图像的风险。为了避免这种情况,您可以使用故障安全方法,可能像这样:

void SetImage(PictureBox pb, Bitmap bmp)
{
    if (pb.Image != null)
    {
        Bitmap tmp = (Bitmap)pb.Image;
        pb.Image = null;
        tmp.Dispose();
    }
    pb.Image = bmp;
}

如果我试图在button1_Click方法

中使用"e.Graphics"行代码,则无法使其工作。

这是故意的。你不应该在处理Click事件时绘制任何东西。因此,调用Paint事件处理程序至少是不方便的。

正确的方法是在处理Click的同时调用Invalidate(),然后让Windows决定何时调用Paint事件处理程序。如果由于Click事件的结果应该绘制不同的东西,那么Click事件处理程序应该更新您的数据来指示这一点,以便稍后当Paint事件处理程序被调用时,它确切地知道当时要绘制什么。