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 aplikację, 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ć

Wskazówka:


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ń

Wskazówka:


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ć

Wskazówka:


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#

Pełny kod aplikacji

Wskazówka:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace zegar17
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        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)];
        }

        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;
            }
        }

        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)];
        }
    }
}
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz