0

我有一个用户控件,其中包含一个名为 panel1 的面板。有一条指令在panel1_paint面板上画了一些线,我将在下面的行中以窗口形式执行绘画事件:

注意:DrawLines 已在 UserControl1.CS 中定义

public void DrawLines()
{
    ...
    ...
            panel1.Invalidate();    
}

我不知道为什么这不会运行,也许它画线然后面板刷新,这使得面板被清除。所以我将代码更改为:

public void DrawLines()
{
    ...
    ...
    panel1_Paint(this, new PaintEventArgs(panel1.CreateGraphics(),
         panel1.ClientRectangle));  


}

这很好用。它在面板中绘制了一些线条,现在主要部分是:他们将在面板上作为子项在运行时创建一些对象。我想将它们移到面板上(例如假设有火粒子)。因此,当我将它们移动(动画)时,如果面板上的任何对象(粒子)在它们上方移动,timer则由 Paint Event 绘制的线条将被清除并移除。e.Graphics那么我该如何避免这种情况呢?!我的失效有什么问题吗?我怎样才能在面板上同时拥有线条和移动粒子?面板已经做了图形,但是为什么在上面移动物体,图形会被移除呢?

4

1 回答 1

1

以下是如何在 Paint() 事件中使用提供的图形:

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        Graphics G = e.Graphics;

        // ... use "G" to draw with ...
        G.DrawLine(Pens.Black, 0, 0, panel1.Width, panel1.Height);
    }

然后你可以简单地使用:

panel1.Invalidate();
于 2013-06-05T18:21:49.067 回答