Einfache button-Animationen
Ich versuche zu lernen .NET
Programmierung. Als Teil meines Lernens habe ich versucht, einige Auswirkungen auf die Schaltflächen. Es funktioniert... aber nicht so glatt wie ich es mir vorgestellt! Gibt es eine bessere Möglichkeit, dies zu tun? Vielen Dank im Voraus!
Mein müssen:
Gibt es 3 buttons.
Wenn Sie Schwebeflug die Maus über einen von Ihnen, es dehnt sich aus und wenn Sie mit der Maus aus der Schaltfläche, es wieder zu seiner ursprünglichen Größe.
private void button1_MouseHover(object sender, EventArgs e)
{
button1.BackColor = Color.White;
button1.Width = 130;
button1.BringToFront();
}
private void button1_MouseLeave(object sender, EventArgs e)
{
button1.BackColor = Color.Red;
button1.Width = 75;
}
private void button2_MouseHover(object sender, EventArgs e)
{
button2.BackColor = Color.Gray;
button2.Width = 130;
button2.BringToFront();
}
private void Form1_MouseLeave(object sender, EventArgs e)
{
button2.BackColor = Color.Red;
button2.Width = 75;
}
private void button3_MouseHover(object sender, EventArgs e)
{
button3.BackColor = Color.DimGray;
button3.Width = 130;
button3.BringToFront();
}
private void button3_MouseLeave(object sender, EventArgs e)
{
button3.BackColor = Color.Red;
button3.Width = 75;
}
- Wenn Sie sagen, es ist nicht so glatt wie Sie möchten, können Sie uns erklären, was das problem ist?
- Gut, es springt von einem Zustand in den nächsten, und nicht den übergang langsam über einen Zeitraum von Zeit, wie eine echte "animation".
- Gut, was Sie tun, ist nur die Einstellung einer Farbe - es gibt keine implizite animation in diesem.
- Er verändert die Größe...
- Wenn Sie möchten, dass die animation (ich gehe davon aus, dass dies WinForms), sind Sie gehen zu müssen, um code, der Ihnen per Timer.
- Sorry, die Größe. Egal, es gibt keine implizite animation in jeder dieser Eigenschaften. Er ist zu haben, um code Sie Sie (oder geben Sie Sie wenn in WPF/Silverlight/RT).
- Ja, und das ist, was er bittet um Hilfe mit dem.
- Ich merke, wie WinForms arbeiten. Ich wurde gefragt, für die askers interpretation dessen, was er zu sehen erwartet, gegenüber dem, was er tatsächlich sah. Ich dachte, vielleicht war er zu sehen, ein flackern, das ist ein häufiges Problem mit WinForms.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also erstmal aus, wollen Sie nicht zu tun genau das gleiche 3 mal. Erstellen Sie eine einzelne Methode, um fügen Sie die entsprechenden Handler für eine Schaltfläche, und dann schreiben Sie einfach den code einmal, um mit jeder gegebenen Taste.
Beachten Sie, dass Sie gehen kann, in der erweitern/Vertrag tick-Handler und verwenden Sie die
percentComplete
Wert zum einstellen der Höhe als auch zu verschieben, wird die Farbe entlang ein Spektrum (das würde bedeuten, einige der Mathematik der Farben zu tun, obwohl) oder zu ändern, jeden anderen Aspekt der auf-Taste. Wenn Sie wirklich motiviert zu verallgemeinern könnte man fügt einen parameter an die Methode vonAction<double>
etwas zu dem Objekt, basierend auf den angegebenen Prozent Fortschritt.Wenn Sie WinForms, Animationen gehen zu werden ziemlich schmerzhaft, und Sie haben, um Sie zu behandeln, sich über
Timer
Objekte.Wenn Sie in kommen .NET und wollen, um cool aussehende Anwendungen mit animatons und styling, ich empfehle Sie schauen Sie WPF statt. Es können Animationen sehr leicht, obwohl C# oder XAML.
Während es noch möglich ist in WinForms, es dauert weit mehr Entwicklungs-Zeit, wo, wie diese features in WPF bereits (und optimiert).
Beim ändern von controls-Eigenschaften, es wirkt sofort. Was Sie sich wünschen, ist etwas, das ist in der Regel bekannt, als irgendeine Art von "einblenden" oder "tweening". Möglicherweise gibt es Bibliotheken gibt, um dies zu tun, aber wenn Sie wollte, dies zu schreiben, selbst für Spaß, verwenden Sie ein Timer-Objekt, und bei jedem tick update der Farbe.
Was würden Sie tun, ist eine Farbe wie der TargetColor irgendwo(dies ist eine variable oder eine Eigenschaft, die Sie machen), und dann starten eines Timers, dass die Zecken vielleicht alle 10 Millisekunden. In jedem tick, schauen Sie auf der start-Zeit, und wie lange vergangen war, seit dann. Wenn Sie möchten, dass die animation statt, der eine ganze Sekunde, dann ist 1000 Millisekunden. Also bei jedem tick, schauen Sie auf der Höhe der Zeit, die vergangen ist, vielleicht 200 Millisekunden, dann teilen Sie 200/1000 um den Bruchteil der Zeit, die Sie gegangen sind, in der animation. Dann schaust du einen Unterschied zwischen der Start-und Ziel-Farbe, multiplizieren Sie die Differenz durch die Fraktion, und fügen Sie das Ergebnis für die start Farbe. In anderen Worten, 200 Millisekunden in eine animation, die letzten 1000 Millisekunden, das bedeutet, Sie sind 20% in der animation. So Sie wollen, um die Farbe zu sein, was Farbe ist 20% von der startfarbe in Richtung der end-Farbe.
Gibt es eine Menge Sie tun können, um zu verfeinern. Vielleicht eine Unterklasse Button-Steuerelement kapselt den timer und stellt Funktionen/Eigenschaften, um track-start/Ende, Farbe, animation, übergang, etc. Die meisten animierten UI-features wie diesem können Sie angeben, wie lange die animation dauern soll, und dann interpoliert die dazwischen Staaten, wie es übergänge. Dies ist der Ursprung des Begriffs "tweening", wie es vom übergang von einem Zustand in einen anderen durch inbetweening