Kontrolka Timer w aplikacji i zmienna losowa

Użycie kontrolki Timer w aplikacji jest namiastką wątku, który jest bardziej skomplikowany do realizacji niż zaimplementowanie tej kontrolki. Timer pozwala cyklicznie wykonywać fragment kodu programu.

Cel: Napisz aplikacje która w sposób losowy wyświetli grafikę z zasobu graficznego ImageList po naciśnięciu klawisza oraz cyklicznie w wybranym interwale czasowym

kontrolka Timer Visual Studio C#

Krok 1. Użyte komponenty

Kontrolce Panel we właściwości Doc ustawiamy opcję Top

Panel Visual Studio C#

W obszarze kontrolki Panel osadzamy dwie kontroli Button, jedną kontrolkę TextBox i jedną kontrolkę Label

Kontrolka Timer znajduje się w kategorii Składniki

kontrolka Timer Visual studio C#

i należy do kontrolek niewizualnych. Po osadzeniu znajduje się tuż pod oknem projektowanej formatki

zegra Visual Studio C#

Dodajemy kontrolkę ImageList

imageList visual studio c#

Osadzamy kontrolkę PictureBox


pictureBox visual studio c#

We właściwości Dock ustawiamy opcję Fill

właściwość Dock Fill visual studio c#

Układ osadzonych kontrolek przedstawia poniższa ilustracja

układ kontrolek formularza visual studio c#

Krok 3. Tworzymy zasoby graficzne

W dowolnym programie graficznym rysujemy kilka grafik o jednakowych rozmiarach. Proponuję narysować ścianki kostki do gry przy rozmiarze 256 x 256 pikseli. Gotową grafikę dodajemy do kolekcji kontrolki ImageList

zasoby ImageList visual studio c#

Krok 4. Losujemy zasób graficzny

W omawianym przykładzie kolekcja graficzna zwiera sześć sztuk różnych obrazów. Są one indeksowane od zera do pięć. Wybór grafiki będzie się opierać na wylosowaniu wartości liczbowej z zakresu od 1 do 6, wtedy musimy odjąć jeden aby otrzymać indeks z zakresu kolekcji graficznej. Lub losujemy zakresu od 0 do 5, wtedy nic nie odejmujemy.

Poniższy kod przedstawia sposób losowania indeksu z szerszego zakresu licz, tak aby zwiększyć losowość. Indeks wylosowanego zasobu graficznego tworzy reszta z dzielenia.

Funkcja przechwycenia zdarzenia kliknięcia w przycisk ma postać


private void Button1_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
Random los = new Random();
float i = los.Next(1, 100);
i=i % 6 + 1;
toolStripStatusLabel1.Text = "Wylosowano wartość: "+i.ToString();
pictureBox1.Image = imageList1.Images[(int)(i - 1)];
}

Skompiluj program i sprawdź efekt działania

Krok 5. Przygotowanie kontrolki Timer do pracy

Ta część programu jest bardziej skomplikowana. W zdarzeniu Click drugiego przycisku musimy uruchomić lub zatrzymać losowanie, odczytać zadany interwał czasowy kolejnych odstępów losowań oraz podmienić tytuł klawisza.

Propozycja jednego z możliwych rozwiązań

private void Button2_Click(object sender, EventArgs e)
{
int interwal = Convert.ToInt16(textBox1.Text)*1000;
timer1.Interval = interwal;
timer1.Enabled = !timer1.Enabled;
if (timer1.Enabled) button2.Text = "Zatrzymaj";
else
{
button2.Text = "Losuj z zegara co:";
pictureBox1.Image = null;
}
}

Skompilowanie i uruchomienie programu na tym etapie będzie w sposób widoczny zmieniać tytuł, a w niewidoczny włączać lub wyłączać kontrolkę Timer

Krok 6. Cykliczne losowanie zasobu graficznego

Cykliczne losowanie zapewni kod programu umieszczony w zdarzeniu Tick kontrolki Timer. Przykładowy kod ma postać


private void Timer1_Tick(object sender, EventArgs e)
{
Random los = new Random();
float i = los.Next(1, 100);
i = i % 6 + 1;
toolStripStatusLabel1.Text = "Wylosowano wartość: " + i.ToString();
pictureBox1.Image = imageList1.Images[(int)(i-1)];
}

Skompiluj i uruchom program. Sprawdź efekt działania

zmienna losowa i kontrolka Timer Visual Studio C#
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play