Windows kontrole + zajednička svojstva
Danas je potpuno nezamislivo da imamo neku aplikaciju koja nema nikakvu interakciju sa korisnikom.
Kada kreirate neku aplikaciju koja sadrži interakciju sa korisnikom moraćete da upotrebite objekte kojima obezbeđujete razmenu informacija izmedu aplikacije i korisnika. Ti objekti će prikazivati podatke korisniku ili će prenositi podatke od korisnika do vašeg programa. Oni se nazivaju kontrole.Osobine Windows kontrola
Pre nego što se upustimo u dalje objašnjavanje kontrola, jedna važna napomena: pomen kontrole u ovoj vežbi odnosi se isključivo na kategoriju Windows kontrola.
Kontrole su prilično raznovrsne (ima mnogo različitih tipova) i one se postavljaju na formu po svojim svojstvima i po svojoj nameni. Istovremeno, iako su raznovrsne, postoje i mnoge sličnosti medu njima.
Zajedničko svojstvo za sve kontrole je da su po svojoj prirodi takođe i prozori, odnosno imaju većinu sličnih svojstava. Njihov zadatak je da prihvataju određene događaje na interfejsu i omoguće dalji tok. Događaji su, kao takvi, specifični samo za određenu kontrolu, ili su pak zajednički.
Posebno je bitno, kao što ste i u ranijim programerskim predmetima do sada imali, korišćenje specifične nomenklature prilikom imenovanja. Ime treba da bude opisno tj. da što više opisuje ono što predstavlja. Ukoliko je za to potrebno više od jedne reči, u C# nomenklaturi takva imena počinju malim slovom, a svaka nova reč velikim. Na primer: firstName, lastName, phoneNumber…
Razlozi za uvođenje nomenklature su jasni: održavanje koda, rad u timu, itd...
Relacija roditelj - dete
Postoji nekoliko relacija između prozora koji čine jednu ili više aplikacija. Jedna od tih relacija je relacija roditelj - dete (parent - child relationship). Npr. kontrola koju ste postavili na neku formu predstavlja prozor čiji roditelj je drugi prozor (forma). Pomeranjem forme se pomeraju sve kontrole na njoj.
Koordinatni sistem
Da bi se bolje razumelo svojstvo Location, evo nekih dodatnih objašnjenja u vezi koordinatnog sistema koji se primenjuje kada je reč o postavljanju objekata na ekran i odnosima između prozora u Windows operativnom sistemu.

Pozicija nekog prozora čiji je roditelj desktop računa se od gornjeg levog ugla ekrana, kao što je to prikazano na slici. Ose koordinatnog sistema orijentisane su tako da rastu od leve strane nadesno za x osu i od vrha nadole za y osu.
Rastojanje od koordinatnog početka tačke do leve ivice je svojstvo “Left”. Adekvatna ostala svojstva zovu se “Right”, “Top”, “Bottom”.

Izbor i postavljanje kontrole na formu
Izbor kontrole se vrši sa toolbox palete na levoj strani ekrana. Kategorije na paleti toolbox obezbeduju nam brži izbor tražene kontrole.

Nakon selektovanja mišem, kontrola se uzima i otupšta (drag and drop) na tekući prozor, odnosno formu. Kontrola će biti pozicionirana na kursoru miša.

• Dvostruki klik na kontrolu - kontrola će biti automatski dodata formi u gornjem levom uglu;
• Postavljanje većeg broja istih kontrola na formu – pritisnut taster Ctrl i selekcija kontrole levim kliom miša.
Selekcija kontrole, podešavanje pozicije i veličine
U cilju promene nekih svojstava, kontrole i njene pozicije, kontrola se mora selektovati. Selekcija kontrole se realizuje levim klikom miša na odabranu kontrolu. Oko kontrole se pojavljuje pravougaonik sa 8 malih kvadratića koji olakšavaju promene dimenzija kontrole u određenim pravcima.
U cilju selekcije više od jedne kontrole moraju biti pritisnuti tasteri Shift ili Ctrl.
Tasterom Shift omogućena je selekcija kontrola od –do, a tasterom Ctrl je omogućeno selektovanje kontrola koje se odabiraju. Zatim se odabira jedna po jedna željena kontrola. Poslednja ima pravougaonik sa crnim kvadratićima oko nje.
Drugi način da se selektuje skup kontrola je levim klikom miša na površinu forme i povlačenjem kursora se formira pravougaonik, a sve kontrole u njemu da postaju selektovane.
Pomeranje određene kontrole vršite tako što kursorom selektujete tu kontrolu, a zatim dok je levi klik miša pritisnut, povlačite kontrolu preko forme. Pošto je pomerite na željenu poziciju, otpustite taster miša i kontrola zauzima novu poziciju. Ako ste selektovali više od jedne kontrole, na isti način možete pomerati i grupu kontrola.
Drugi način je da selektujete kontrolu, a onda koristeći “strelice” na tastaturi izvodite pomeranje kontrole po formi. Korak pomeraja odgovara mreži na formi (grid).
Ukoliko želite preciznije pomeranje koristite pritisnut taster Ctrl.
Zajednička svojstva Windows kontrola
Name
Svaka kontrola ima svojstvo Name. Smisao svojstva Name je da se preko njega omogući pristup. Ime mora postojati i ono se automatski dodaje pri kreiranju, tj. pri postavljanju neke kontrole/forme. Na primer, kada se neka aplikacija formira automatski se postavlja prva forma i njoj se dodeljuje ime Form1. Svaka sledeća forma dobija novo ime sa narednim brojem: Form1, Form2....
Isto pravilo važi i za kontrole koje se postavljaju na forme. One dobijaju imena po automatizmu koje im IDE okruženje dodeljuje a bazira se na tipu kontrole. Tako na primer tekst polja dobijaju imena text1, text2...
Location
Drugi primer uobičajenog svojstva svih kontrola je njihova lokacija (Location). Naravno ovo svojstvo je veoma bitno za vizuelni izgled forme, ali postoje takođe i kontrole koje se postavljaju na formu sa namerom da obezbede dodatnu funkcionalnost bez potrebe da budu vidljive. To je izuzetak kada pozicija kontrole nije od značaja. Ovo svojstvo je opisano koordinatama X i Y. Ovo je pozicija gornjeg levog ugla kontrole u odnosu na prozor na kome se kontrola nalazi. Obratite pažnju da je reč o vrednosnom tipu, jer su X i Y definisani kao celi brojevi) a celi brojevi se realizuju kao strukture.
Size
Kada je rec o grafičkim svojstvima kontrole, osim pozicije, treba spomenuti i njenu veličinu Size. Svi objekti su po prirodi pravougaonog oblika pa se velicina jednostavno opisuje. Svojstva koja opisuju velicinu su: širina ( Width ), odnosno visina ( Height ). Ukoliko se kontrola ne postavlja programski već u toku dizajna forme, promena veličine se obavlja jednostavnim korišćenjem miša, uz pomoć pravougaonika koji označava selektovanu kontrolu. Na pravougaoniku se mišem pritisne kvadratić zavisno od dimenzije koju želimo da promenimo, a zatim se povlačenjem miša menja dimenzija kontrole. Drugi način da se promene parametri kontrole ( ne samo veličina ) je koristeci Properties prozor. Medu svojstvima kontrole lako se prepoznaje svojstvo Size ispred koga se nalazi znak +. Ovaj znak, tipično za Windows, omogućuje ekspandovanje stavke. Ispod ove stavke se nalaze posebno Width i Height. Naravno, sva svojstva mogu se postavljati i programski. Bilo na samom startu pri kreiranju kontrola/formi, bilo u kodu.
Na primer:
static void Main()
{
Form1 F1 = new Form1();
F1.Size = new System.Drawing.Size(800, 600);
Application.Run(F1);
}
Bounds
Pozicija zajedno sa veličinom smeštene su u jednom svojstvu kontrole koje se naziva Bounds. Ovo svojstvo daje pravougaonik kontrole/forme. U kodu ovim svojstvom lako se vrši repozicioniranje i promena veličine kontrole.
Text
Veoma korisno svojstvo svake kontrole/forme je Text. Naravno da postoji kod kontrola koje mogu prikazati tekst. Na primer, kod kontrole labela Text svojstvo čuva tekst koji kontrola prikazuje. Kod kontrole dugme predstavlja tekst koji se prikazuje na dugmetu. Dalje, kod forme predstavlja tekstualni sadržaj u naslovnoj liniji itd, itd. Promena ovog svojstva izvodi se u toku dizajna koristeci Properties prozor i biranjem Text polja a zatim ukucavanjem sadržaja. Obratite pažnju da je podrazumevani tekst u Unicode formatu, tj. lako možete koristiti srpska ili neka druga slova. Naravno da se tekst može menjati i programski.
Na primer:
static void Main()
{
Form1 Fm = new Form1();
Fm.Text = "New Application";
Fm.Size = new System.Drawing.Size(800, 600);
Application.Run(Fm);
}
Visible
Ranije smo pomenuli svojstvo koje odreduje da li je kontrola vidljiva ili ne. Ovo svojstvo se naziva Visible, a vrednosti su bulovog tipa ( Boolean type ) True/False.
Ako kontrola nije vidljiva onda se uobičajeno kaže da je sakrivena - hidden. Ovo svojstvo takođe se može programski menjati jednostavnim dodeljivanjem vrednosti. Ukoliko kontrola nije vidljiva onda nije ni dostupna – logično. Drugim rečima, ona je za korisnika sa stanovišta unosa i prikaza informacija potpuno bez funkcije.
To ne znači da su takve kontrole nepotrebne – naprotiv. U toku izvršavanja programa one se mogu učiniti vidljivim i dostupnim, ili nevidljivim i nedostupnim, u zavisnosti od toga kakva vrsta podataka se unosi i šta se sa kontrolom radi.
Enabled
Kada je kontrola vidljiva to ne znači obavezno da je i dostupna korisniku. Posebno svojstvo definiše da li kontrola može primiti ulaz od korisnika čak i kada je vidljiva.
Ovo svojstvo se naziva Enabled i takođe je bulovog tipa. Ako je kontrola vidljiva, a Enabled svojstvo postavljeno na vrednost false, to znači da korisnik može samo čitati vrednosti te kontrole bez mogućnosti da ih menja. Podrazumevani izgled kontrole u tom slučaju je blago zasivljenje (dimmed). Ovo svojstvo se često programski, u samom kodu menja. Obično kada unos nekih podataka povremeno (ili stalno) treba zabraniti, a prikaz podataka ostaviti.
Fokus kontrole i aktivan prozor
Pojam fokusa i aktivnog prozora bitni su za razumevanje relacija medu prozorima i za objašnjavanje nekih svojstava ( a kasnije i događaja ). Za kontrolu se kaže da je u fokusu ako kontrola može da primi ulaz sa tastature. Takvo stanje poseduju kontrole, ali na primer i stavke u listi. Ono se može posebno grafički označiti što se u podrazumevanom vizuelnom podešavanju i radi.
Pojam aktivnog prozora ne vezuje se za kontrolu koja pripada nekoj formi već za samu formu. Kontrola koja ima fokus nalazi se na aktivnom prozoru. Samo jedan prozor je aktivan u jednom trenutku.
TabIndex i TabStop
Ovde ćemo pomenuti još jedno veoma bitno svojstvo u programiranju na grafičkim okruženjima (GUI). Ovo svojstvo nije vidljivo – bar ne na prvi pogled. Obično ga nazivamo tab redosled ili u originalu tab ordering. Kretanje sa kontrole na kontrolu na jednoj formi koja je aktivna možete izvesti i preko tastature koristeći Tab taster. Kada se on pritisne fokus kontrole se prebacuje na sledeću. Upravo tab svojstvo određuje redosled kontrola u ovom slučaju.
I ne samo to. Kada govorimo o tab redosledu i tab svojstvima treba znati još nešto. Postoje kontrole koje ne mogu primiti fokus – na primer labela. Takođe, kontrola koja može da primi fokus mora imati svojsto TabStop postavljeno na true, ako treba da primi fokus. U suprotnom ta kontrola će biti preskočena dok pritiskate taster Tab. Na sreću, ovo svojstvo je za kontrole koje mogu primati fokus inicijalno postavljeno na true. Kontrole koje ne mogu primiti fokus ( primer Labela ) nemaju ovo svojstvo.
Koja pozicija u tab redosledu pripada određenoj kontroli definiše svojstvo TabIndex. Ukoliko tu poziciju želite da promenite treba da promenite vrednost ovog svojstva.
Postavljanje kontrole u fokus
Fokus označava da je kontrola spremna da primi ulazne podatke. Na primer, ako se neko dugme nalazi u fokusu to se prikazuje tačkastim pravougaonikom oko teksta na tom dugmetu (obratite pažnju na oznaku za podrazumevano dugme jer se ona često meša sa fokusom). Ako se tekst kontrola nalazi u fokusu onda se u njoj nalazi kursor koji trepće (tada je očigledno da kontrola prima ulaz sa tastature). Kada se neka stavka liste nalazi u fokusu tada je ona oivičena tačkastim pravougaonikom. Programski fokus dajemo nekoj kontroli pozivom metode Focus(). Na primer:
bool Focus();