Timer - dwie animacje jedna po drugiej

0

Program w winform właściwie mi działa, a konkretnie jego początek. Chciałem go jednak urozmaicić dodając animacje. Chodzi o to, że mam na formie button, który powoduje powiększenie tej formy w szerokosci i wysokosci. Zastosowałem timer i wszystko hula. Ja jednak bym chciał to podzielić na dwie animacje tzn. najpierw forma zwiększa się przez szerokość, a dopiero potem zwiększa się wysokość. Jednak co bym nie robił, cały czas height i width rosną jednocześnie.

Macie jakiś pomysł? Chodzi po prostu o to, jak oddzielić od siebie w jednej metodzie obsługującej click, dwie animacje?

0

Aby to rozwiązać, timer najpierw musi wykonywać tylko i wyłącznie zmianę na jednej osi, a po ukończeniu bieżącego rozszerzania, zająć się tylko i wyłącznie drugą osią; To raczej oczywiste, więc nie wiem co tu jeszcze tłumaczyć;

Możesz wszystko zapisać w jednym miejscu i warunkami sprawdzać, w którą stronę teraz rozszerzać; W pseudokodzie wyglądałoby to tak jak poniżej, najpierw dane:

Form.Width  - bieżąca szerokość okna
Form.Height - bieżąca wysokość okna
DestWidth   - docelowa szerokość
DestHeight  - docelowa wysokość

Teraz właściwy fragment:

if Form.Width < DestWidth then
  Form.Width += 1
else
  if Form.Height < DestHeight then
    Form.Height += 1
  else
    Timer.Stop

W takim przypadku, timer najpierw będzie zwiększał szerokość okna aż do szerokości docelowej, następnie będzie zwiększał wysokość aż do wysokości docelowej; Jak skończy z ustawianiem wysokości to zostanie zatrzymany; Jeżeli najpierw ma być zwiększana wysokość to zamień pierwszy warunek z drugim;

Powyższe to jedynie pseudokod, więc spróbuj zaimplementować to używając składni C#.

0

Ja to robię inaczej. W metodzie obsługującej zdarzenie klick dałem:

if (AnimacjaRozmiaru.Enabled == false)
            {
                AnimacjaRozmiaru.Enabled = true;
            }
            if (this.Width == 825)
            {
               AnimacjaRozmiaru.Start();
               this.Width = this.Width + skok;
             }
            else if (this.Width > 975)
            {
                AnimacjaRozmiaru.Stop();
            }
            else if (this.Width == 975 && this.Height == 500)
            {
                AnimacjaRozmiaru.Start();
                this.Height = this.height + skok2;
            }

Natomiast w metodzie obsługującej zdarzenie thick dałem:


this.Width = this.Width + skok;
            this.Height = this.Height + skok2;
                if (this.Width > 975)
                {
                    AnimacjaRozmiaru.Stop();
                }

                if (this.Height>650)
                {
                    AnimacjaRozmiaru.Stop();    
                }

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0