在控件上绘制一些图形后,将控件的子控件动画化

本文关键字:控件 动画 图形 绘制 | 更新日期: 2023-09-27 18:16:59

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

注意:DrawLines已经在usercontrol . cs

中定义
public void DrawLines()
{
    ...
    ...
            panel1.Invalidate();    
}

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

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

}

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

在控件上绘制一些图形后,将控件的子控件动画化

下面是如何在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();