在Panel中绘制一些形状而不使用Panel1_Paint()事件

时间:2013-08-05 07:24:57

标签: c# winforms panel paint

我正在绘制一些东西,让我们在Windows窗体中假设一个图像。 我能够画出我按照以下步骤绘制:

1)在表格中添加了面板 2)使用以下代码:

private void panel1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImage(im, leftTop);
    }

这是绘制面板的唯一方法。

我有一个计划,不使用此事件 我试过下面的代码,结果是否定的。

this.panel1.CreateGraphics().DrawImage(im, leftTop);

在这两种情况下,我都是一个图像。

..我能画画吗? ?

1 个答案:

答案 0 :(得分:1)

是的,您可以绘制它,但是如果引发Paint事件,将重新绘制默认的东西,并且您绘制的所有内容都将被覆盖/删除/清除。

因此,要绘制图像,最好的方法是在Paint事件处理程序中添加绘图代码作为您发布的第一个代码。

否则,您必须定期绘制图像,这是无效的,因为我们只需要在需要时重新绘制它。系统提供Paint事件以在需要重新绘制控件时通知(在默认图形旁边)。

以下是使用计时器定期绘制图像的方法,但不建议这样做,仅用于演示目的:

 Timer t = new Timer();
 t.Interval = 10;
 Graphics g = null;
 panel1.HandleCreated += (s,e) => {
   g = panel1.CreateGraphics();
 };
 t.Tick += (s,e) => {
    if(g == null) return;
    g.DrawImage(im,leftPoint);
 };
 //
 t.Start();

事实上,当Paint发送到您的WM_PAINT时会引发Panel事件,您可以捕获此消息以绘制图像,而不是在{{1}时绘制它提出来了。

Paint