You are on page 1of 2

ZADATAK

U zadatku TMP_3 potrebno je napraviti formu kao na slici.

Cilj zadatka je da upoznati se sa nekim kontrolama i njihovim korištenjem na formi i načinom na koji je moguće pristupiti
nekoj kontroli i njenim parametrima.

U zadatku potrebno inicijalizovati najmanju vrijednost datuma u kontroli DateTimePicker na današnji datum.

U zadatku je potrebno napraviti funkciju izabrano() koja će vratiti promjenljivu tipa string, a u kojoj će biti Text parameter
kontrole tipa RadioButton. Kodiranje obaviti sa minimalnim brojem linija koda. Kada korisnik klikne taster button1
prikazuje mu se MessageBox sa porukom koji RadioButton je označen kao što je prikazano na slici.
RJEŠENJE I OBJAŠNJENJE KODA
Kontrole se najčešće inicijalizuju u Design modu preko prozora Properties. Na ovakav način je moguće inicijalizovati
vrijednost parametara kontrole ako se radi o nekim statičkim i unaprijed definisanim vrijednostima. U slučaju da je
potrebno postaviti neku vrijenost atributa kontrole to je najbolje uraditi unutar samog konstruktora nakon poziva funkcije
InitializeComponent();. Nakon poziva ove funkcije sve kontrole su inicijalizovane i postavljene na formu, te im se može
pristupiti i mjenjati neki od atributa.
U ovom primjeru potrebno je postaviti vrijednost atributa MinDate kontrole DateTimePicker na današnji datum (to jeste
na trenutnu vrijednost datuma na računaru). Datum je promjenljiv pa ga je nemoguće definisati preko prozora Properties.
Da bi se postavila ova vrijednost korišten je dio koda:
dateTimePicker1.MinDate = DateTime.Now;
Unutar namespace-a System postoji objekat DateTime koja ima atribut Now a koji nam vraća trenutni datum i vrijeme sa
računara na kome se koristi prikazan kao lokalno vrijeme podešeno na računaru.
Dalje u kodu kreirana je metoda button1_Click u kojoj se samo poziva MessageBox koji kao prvi argument [Tekst koji će
biti prikazan u MessageBox-u] ima funkciju izabrano(). Funkcija izabrano je tipa string, to jeste vraća vrijednost koja je
string i koja će se prikazati u MessageBox-u.
Funkcija izabrano() ima sledeći sadržaj:
private string izabrano()
{
foreach (Control ctrl in groupBox1.Controls)
{
if (ctrl is RadioButton)
{
RadioButton rdb = (RadioButton)ctrl;
if (rdb.Checked)
return rdb.Text;
}
}

return "";
}
U dijelu foreach (Control ctrl in groupBox1.Controls) kreira se nova instance ctrl tipa Control i sve kontrole koje
se nalaze u groupBox1 se smještaju kao niz ovih objekata. Sve kontrole koje se postave na formu imaju istu roditeljsku
klasu Control. Sa petljom foreach se prolazi kroz svaku kontrolu koja zadovoljava uslov u zagradi. U sledećem redu se
ispituje da li je kontrola ctrl tipa RadioButton. Ako jese kreira se novi RadioButton rdb i provjerava se da li je ona označena,
tako što se provjeri vrijednost atributa Checked. Ako je rdb označena funkcija vraća vrijednost atributa Text datog
RadioButton-a [To jeste ono što na formi piše pored izabranog RadioButton-a]. Funkcija odmah vrati vrijednost jer u
jednom GroupBox-u može biti označen samo jedan RadioButton, te nema potrebe da prolazi kroz ostale kontrole. Ukoliko
ni jedan RadiButton nije označen onda funkcija vraća prazan string.
Petljom foreach (Control ctrl in groupBox1.Controls), prolazi se kroz sve kontrole u GroupBox-u groupBox1.
Primjer ove petlje koji bi se mogao primjeniti na kontrole na cijeloj formi izgledao bi ovako
foreach (Control ctrl in this.Controls).
Uslovom if (ctrl is RadioButton) ispituje se da li je kontrola tipa RadioButton. Na isti način se može provjeriti da
li je kontrola tipa CheckBox ili Button ili bilo koja druga kontrola. Uslov za CheckBox bi izgledao if (ctrl is CheckBox)
ili za Button može da se napiše kao if (ctrl is Button).
Tip kontrole može se ispitati i na sledeći način
if (ctrl.GetType().ToString() == "System.Windows.Forms.RadioButton"),
ali je prvi način mnogo pogodniji za pamćenje i pregledniji za pisanje.
U sledećem koraku radi se definisanje kontrole ctrl kao RadioButton-a rdb, na isti način kao što se radilo kod kreiranja
jedne metode za upravljanjem događajima za radom sa više tastera. Potrebno je napraviti novu kontrolu i definisati je kao
RadioButton, da bi se moglo ispitati da li je označena, to jeste da bi se moglo pristupiti patametru Checked. Kontrola ctrl
koju je u prethodnom koraku ispitivana pripada klasi Control i ne može se pristupiti atributu Checked preko ctrl.Checked,
jer nema svaka kontrola ovaj atribut te on nije ni definisan u roditeljskoj klasi Control.
Na isti način se mogla ispitati bilo koja kontrola. Npr:
if (ctrl is Button){
CheckBox chk = (CheckBox)ctrl; Button btn = (Button)ctrl;
if (chk.Checked) return btn.Text;
}

You might also like