什么是最好的方法来做一个无闪烁的动画C#自定义控件

本文关键字:一个 闪烁 动画 自定义控件 方法 什么 | 更新日期: 2023-09-27 17:47:48

我目前正在创建一个自定义控件,该控件需要处理C#项目中的动画。它基本上是一个列表框,包含固定数量的可移动元素。一个元素(另一个具有背景图像和几个生成标签的用户控件)可以向上、向下移动或从列表中删除。

当元素在容器自定义控件中移动时,我想创建动画移动,但在我看来,使用等线来移动控件

myCustomControl.left -= m_iSpeed;

在计时器内触发的事件是闪烁的,并且具有糟糕的渲染,即使打开了双缓冲。

所以问题来了:实现无闪烁动画C#控件的最佳方法是什么我应该不创建自定义控件并处理我生成的面板背景图像中的所有绘图吗?有没有一种我还没有发现的超级动画方法?:)

谢谢!

什么是最好的方法来做一个无闪烁的动画C#自定义控件

您对无闪烁动画的最佳选择是自己绘制(使用绘制事件处理程序中的Graphics对象)并使用双缓冲。在您的自定义控件中,您需要在构造函数中使用这样的代码:

this.SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | 
    ControlStyles.AllPaintingInWmPaint | ControlStyles.SupportsTransparentBackColor,
    true);

今天上午也就这个问题进行了类似的讨论。视觉c#表单更新导致闪烁。所以我会很懒,给出和我在那里给出的答案一样的答案:

您可以尝试调用this。SuspendLayout()在你开始移动之前和这个。简历布局(false)当您移动完所有控件时。通过这种方式,所有控件都应该同时绘制,并且应该减少闪烁。

顺便说一句,我曾试图在工作中重现这一点,但似乎失败了。你能给我更多的样本代码,我也许可以修复吗

请参阅如何使缓冲区加倍。NET控件。

获得无闪烁动画的正常方法是实现双缓冲。看看这篇代码项目文章

http://www.codeproject.com/KB/GDI-plus/flickerFreeDrawing.aspx

在准备好之前尽量减少对绘制的调用也是一个好主意。