在控件上绘制一些图形后,将控件的子控件动画化
本文关键字:控件 动画 图形 绘制 | 更新日期: 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();