4

現在、C# プロジェクトでアニメーションを処理する必要があるカスタム コントロールを作成しています。これは基本的に、移動の対象となる一定数の要素を含むリストボックスです。要素 (背景画像といくつかの生成されたラベルを持つ別のユーザー コントロール) は、上または下に移動したり、リストから削除したりできます。

コンテナのカスタムコントロール内で要素が移動するときにアニメーション化された動きを作成したいのですが、次のような行を使用してコントロールを移動するようです

myCustomControl.left -= m_iSpeed;

タイマー イベント内でトリガーされると、ちらつきが発生し、ダブル バッファリングがオンになっている場合でもレンダリングがひどいものになります。

そこで質問です:ちらつきのないアニメーション C# コントロールを実現する最善の方法は何ですか? カスタム コントロールを作成して、生成したパネルの背景画像内のすべての描画を処理するべきではありませんか? 私が発見していないスーパーアニメーションメソッドはありますか?:)

ありがとう!

4

4 に答える 4

3

ちらつきのないアニメーションを実現する最善の方法は、ペイントを自分で行い (Paint イベント ハンドラーで Graphics オブジェクトを使用)、ダブル バッファリングを使用することです。カスタム コントロールでは、コンストラクターで次のようなコードが必要になります。

this.SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | 
    ControlStyles.AllPaintingInWmPaint | ControlStyles.SupportsTransparentBackColor,
    true);
于 2008-10-08T12:25:30.427 に答える
1

今朝、この質問について同様の議論が行われました。Visual C#フォームの更新により、ちらつきが発生します。だから私は怠惰になり、そこで与えたのと同じ答えを出します:

this.SuspendLayout();を呼び出してみることができます。移動を開始する前に、this.ResumeLayout(false); すべてのコントロールの移動が終了したら。このようにして、すべてのコントロールが一度に描画され、ちらつきが少なくなります。

ちなみに、私はこれを職場で再現しようとしましたが、失敗しているようです。おそらく修正できるサンプルコードをもう少し教えてもらえますか?

于 2008-10-08T12:23:14.177 に答える
0

ちらつきのないアニメーションを取得する通常の方法は、ダブル バッファリングを実装することです。このコードプロジェクトの記事を見てください

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

準備が整うまでペイントの呼び出しを最小限に抑えることも良い考えです。

于 2008-10-08T12:25:29.130 に答える