Frage

Stellen Sie sich vor Sie möchten, animieren Sie ein Objekt auf einer WinForm.Sie setup einen timer zum aktualisieren der Staat oder die Modell, und überschreiben der paint-Ereignis des Formulars.Aber von dort, was ist der beste Weg, um ständig aktualisieren Sie das Formular für die animation?

  • Erlöschen der Form, sobald Sie fertig sind zeichnen?
  • Setup ein-Sekunden-timer und zum erlöschen der form auf einem regelmäßigen Intervall?
  • Vielleicht gibt es ein gemeinsames Muster für dieses Ding?
  • Gibt es irgendwelche nützlich .NET-Klassen, um zu helfen?

Jedes mal, wenn ich brauche, um dies zu tun, entdecke ich eine neue Methode mit einem neuen Nachteil.Was sind die Erfahrungen und Empfehlungen aus der SO-community?

War es hilfreich?

Lösung

In einigen Situationen ist es schneller und mehr bequem, nicht zu ziehen mit dem paint-Ereignis, sondern immer das Graphics-Objekt aus der Kontrolle/form und Malerei "auf".Dies kann einige Probleme mit der Deckkraft/anti-aliasing/text etc, aber könnte der Mühe Wert sein, in Bezug auf, dass Sie nicht mit zu streichen, die ganze shabang.Etwas entlang der Linien von:

private void AnimationTimer_Tick(object sender, EventArgs args)
{
    // First paint background, like Clear(Control.Background), or by
    // painting an image you have previously buffered that was the background.
    animationControl.CreateGraphics().DrawImage(0, 0, animationImages[animationTick++])); 
}

Ich benutze dies in einigen Kontrollen selbst, und haben gepufferten Bilder zu "löschen" im hintergrund mit, wenn das Objekt des Interesses bewegt oder entfernt werden müssen.

Andere Tipps

Ich habe eine Bibliothek, die helfen könnten, mit diesem.Es heißt Übergänge, und kann hier gefunden werden: http://code.google.com/p/dot-net-transitions/

Es verwendet Timer läuft auf einem hintergrund-thread, um das animieren von Objekten.Die Bibliothek ist open-source, so dass, wenn es ist keine Verwendung zu Sie, Sie können Blick auf den code werfen, um zu sehen, was es tut.

Was Sie tun, ist die einzige Lösung, die ich je benutzt habe in WinForms (ein timer mit konstanter redrawings).Es gibt eine Reihe von Techniken, die Sie verwenden können, um die Erfahrung des Benutzers mit glatter (wie double-buffering).

Möchten Sie vielleicht zu geben, WPF eine versuchen.Es sind gebaut-in Einrichtungen für mache Animationen in WPF, und Sie sind viel weicher (und erfordert weniger code und keine Synchronisierung auf Ihrem Teil) als eine timer-basierte Lösung.

Beachten Sie, dass Sie nicht brauchen, um WPF verwenden in Ihrer gesamten app-Lösung;es ist möglich zu packen, um diese Funktionalität in einer WPF-Steuerung integrieren und die Steuerung in einer WinForms-Anwendung (oder einer nicht verwalteten app, für diese Angelegenheit):

http://www.codeproject.com/KB/WPF/WPF_UserControls.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top