"Korišćenje kontrola za Windows forme – II deo
Kontrole RadioButton i CheckBox
Kao što smo već rekli, kontrole RadioButton i CheckBox koriste istu osnovnu klasu kao i kontrola Button, iako im se izgled i korišćenje znamo razlikuju. Radio dugme se tradicionalno prikazuje kao oznaka sa kružićem na levoj strani, koje može biti izabrano ili ne. Radio dugme bi trebalo koristiti kada želite od korisnika da bira između međusobno isključivih opcija. Primer za to bi mogao biti pol korisnika. Da biste grupisali vise radio dugmadi kako bi ona činila logičku jedinicu, koristite kontrolu GroupBox. Prvo stavite kontrolu GroupBox na formular, zatim ubacite neophodne kontrole RadioButton unutar tog okvira; kontrole RadioButton znaće kako da menjaju svoj status tako da samo jedna kontrola unutar grupnog okvira bude izabrana. Ako kontrole RadioButton ne stavite u grupni okvir, samo jedna od njih unutar formulara može biti izabrana. Kontrola CheckBox (polje za potvrdu) tradicionalno se predstavlja kao oznaka sa kvadratićem na levoj strani, koji može biti potvrđen. Koristite polja za potvrdu kada želite da omogućite korisniku da bira jednu ili vise opcija. Primer može biti upitnik gde korisnik bira operativne sisteme koje je koristio (npr. Windows 95, Windows 98, Linux, Max OS X itd.). Pogledaćemo važnije osobine i događaje za ove dve kontrole, počevši od radio dugmeta, a zatim pred na primere.
Svojstva kontrole RadioButton
Pošto je kontrola izvedena is klase ButtonBase, a već smo videli neke osobine kontrole Button, ovde ćemo opisati samo nekoliko svojstava. Kao i uvek, ako vam je potrebna kompletna lista svojstava, pogledajte MSDN biblioteku. Ime osobine Dostupnost Opis
Radio dugme se pojavljuje kao oznaka sa kružićem levo, u sredini ili desno od oznake, ili kao standardno dugme. U poslednjem slučaju, dugme se prikazuje kao pritisnuto ako je izabrano, odnosno u 3D obliku ako nije. Ako je ovo svojstvo podešena na true, znak za potvrđivanje se pojavljuje kada korisnik pritisne na radio dugme. Kada je ovo svojstvo podešeno na false, podrazumeva se da se znak za potvrđivanje ne pojavljuje. Određuje položaj radio dugmeta. Svojstvo može biti podešeno na left, middle ili right (levo, u sredini, desno). Pokazuje status kontrole. Ako je kontrola potvrđena, onda je ovo svojstvo podešeno na true, odnosno false u suprotnom.
Appearance
Čitanje/upis
AutoCheck
Čitanje/upis
CheckAlign Checked
Čitanje/upis
Čitanje/upis
1
Događaji kontrole RadioButton
Obično, imaćete samo jedan događaj kada radite sa kontrolama RadioButton. Naravno, postoje i drugi događaji. Razmatraćemo samo dva u ovom predavanju, a jedini razlog što pominjemo dragi događaj jeste taj što postoji jedva primetna razlika koju treba istaći: Ime Opis
Ovaj događaj se šalje kada se menja potvrda radio dugmeta. Ako ima vise kontrola RadioButton na formularu ili unutar jednog grupnog okvira, ovaj događaj se šalje dva puta: prvo kontroli koja je bila potvrđena a sada vise nije, a zatim kontroli koja postaje potvrđena. Ovaj događaj se šalje svaki put kada se pritisne na radio dugme. Ovo nije isto kao i događaj CheckChanged, zato što pritisak na radio dugme dva ili vise puta uzastopno menja svojstvo Checked samo jednom - i to samo ako kontrola nije prethodno bila potvrđena.
CheckChanged
Click
Kao što pretpostavljate, osobine i događaji ove kontrole su slični onima za RadioButton, ali tu su i dve nove: Ime osobine Dostupnost Opis
Za razliku od radio dugmeta, polje za potvrdu može imati tri statusa: Checked, Indeterminate i Unchecked (potvrđeno, neodređeno i nepotvrđeno). Ako polje ima status Indeterminate, onda je obično kružić pored oznake siv, tako pokazujući da je trenutna vrednost kružića ili neispravna ili nema nikakvog smisla u trenutnim okolnostima. Primer ovakvog statusa možete videti ako izaberete nekoliko datoteka u Windows Exploreru i pogledate Properties ovih datoteka. Ako se neke od ovih datoteka mogu samo čitati, a druge i menjati i čitati, onda će polje za potvrdu Readonly biti potvrđeno, ali sivo - neodređeno. Ako je ovo svojstvo podešena na false, korisnik neće modi da izmeni status kontrole na Indeterminate. Možete, međutim, izmeniti status u kodu.
Svojstva kontrole CheckBox
CheckState
Čitanje/upis
ThreeState
Čitanje/upis
2
Obično, koristićete samo jedan ili dva događaja za ovu kontrolu. Iako događaj CheckChanged postoji i za kontrole RadioButton i CheckBox, javlja se izvesna razlika u efektima ovih događaja: Ime Opis
Dešava se kada se menja svojstvo Checked kontrole. Kod kontrola sa osobinom ThreeState podešenom na true moguće je pritisnuti na polje za potvrdu bez promene Checked osobine. Do ovoga dolazi kada se status polja menja iz Checked uIndeterminate. Dešava se kada se menja svojstvo CheckedState kontrole. Kako su Checked i Unchecked moguće vrednosti za svojstvo CheckedState, ovaj događaj će biti poslat uvek kada se menja svojstvo Checked. Takođe, biće poslat kada se status menja iz CheckeduIndeterminate.
Događaji kontrole CheckBox
CheckedChanged
CheckedStateChanged
Ovim završavamo opise događaja i svojstava kontrola RadioButton i CheckBox. Pre nego što pređemo na primer, pogledajmo kontrolu GroupBox, koju smo ranije pomenuli.
Kontrola GroupBox
Pre nego što predemo na primer, pogledaćemo kontrolu GroupBox. Ova kontrola se obično koristi zajedno sa kontrolama RadioButton i CheckBox, da bi napravila okvir i zaglavlje za grupu kontrola koje su logički povezane. Grupni okvir se jednostavno dovuče na formular, a zatim se stavljaju ostale kontrole unutar tog okvira (obrnuto nije moguće - ne možete staviti grupni okvir na već postojeće kontrole). To za efekat ima da roditelj kontrola postaje grupni okvir, a ne formular, što znači da može biti izabrano vise kontrola RadioButton u isto vreme. Međutim, unutar jednog grupnog okvira može biti izabrano samo jedno radio dugme. Odnos roditelj/dete možda zahteva dodatno objašnjenje. Kada se kontrola stavi na formular, kaže se da je formular roditelj kontrole, odnosno kontrola je dete formulara. Kada stavite grupni okvir na formular, grupni okvir postaje dete formulara. Kako grupni okvir sadrži nove kontrole, on postaje roditelj za te kontrole. Ovo znači da kada pomerite grupni okvir, pomeraju se i sve kontrole koje se nalaze u tom okviru. Dragi efekat stavljanja kontrola u grupni okvir jeste mogućnost menjanja određenih svojstava kontrola jednostavnom promenom odgovarajućih svojstava grupnog okvira. Na primer, ako želite da onesposobite sve kontrole unutar grupnog okvira, možete jednostavno podesiti svojstvo Enabled grupnog okvira na false. Prikazaćemo primenu grupnog okvira u primeru koji sledi.
3
Primer kontrole RadioButton i CheckButton
Vežba br. 23.
Stari projekat odnosno vežbu pod brojem 22. Primer TextBox. Snimite je u drugom folderu, recimo C:\Temp\SoftIng\LecturesCode\Vezba23. Otvorite VS .NET i kreirajte novi projekat. Izaberite Visual C# Projects direktorijum unutar prozora Project Types:, i tip projekta Windows Application u okviru prozora Templates: U okviru za tekst Location: promenite putanju u C:\Temp\SoftIng\LecturesCode\Vezba23, i ostavite podrazumevani tekst u okviru za tekst Name: KontrolaRadioCheck Button. Da bi smo iskoristili prethodni primer, prvo ćete obrisati iz već postojećeg projekta fajl Form1.cs tako što izaberete pomoću desnog tastera miša opciju Delete na selektovan fajl.
Zatim ćemo dodati fajl sa istim nazivom ali iz prethodnog primera odnosno vežbe 19 koje ste malo pre iskopirali. Selektujte naziv projekta u prozoru Solution Explorera KontrolaRadioCheck Button, izaberete pomoću desnog tastera miša opciju Add>Add Existing Item... na selektovan naziv projekta. I birate naziv fajla Form1.cs iz foldera C:\Temp\SoftIng\LecturesCode\Vezba23\ Primer TextBox. I ako ste uradili kako treba, možete otvoriti formu iz prethodnog primera.
Izmenićemo prethodni primer u kome smo prikazali upotrebu okvira za tekst. U tom primeru jedino moguće zanimanje je bilo Programer. Umesto da primoramo korisnika da ispisuje ovu reč, promenićemo okvir za tekst u polje za potvrdu. Da bismo demonstrirali korišćenje radio dugmeta, tražićemo od korisnika još jednu informaciju: kojeg je pola. Izmenite okvir sa tekstom na sledeći način: 1. Uklonite kontrolu lblZanimanje i okvir za tekst TextBox pod nazivom txtZanimanje.
4
2. Promenite veličinu formulara tako da u njega može da stane grupni okvir sa informacijom o polu korisnika, i imenujte nove kontrole kao što je prikazano na slici:
3. Dodajte na formu kontrolu CheckedBox i promenite sledeća svojstva: za CheckBox1 Osobina (Properties) Name Text Çhecked Location Size Vrednost (Value) chkProgramer Programer True 104; 191 104; 24
4. Dodajte na formu kontrolu GroupBox i promenite sledeća svojstva: za GroupBox1 Osobina (Properties) Name Text Location Size grpPol Pol 104; 216 296; 56 Vrednost (Value)
5
5. Dodajte na formu u GroupBox-u dve kontrole RadioButton i promenite sledeća svojstva: za RadioButton1 Osobina (Properties) Name Text Çhecked Location Size za RadioButton2 Osobina (Properties) Name Text Çhecked Location Size Vrednost (Value) rdoZensko Žensko False 152; 24 104; 24 rdoMusko Muško True 24; 24 104; 24 Vrednost (Value)
Primetite da ne mogu obe biti podešene na true. Ako to probate, vrednost osobine drugog radio dugmeta se automatski menja na false. Sto se tiče izgleda formulara, nikakve dalje intervencije nisu potrebne, ali moramo izmeniti kod. Prvo moramo izbrisati sve što se odnosi na okvir za tekst koji smo uklonili. Idite na kod i uradite sledeće: 6. U konstruktoru formulara izbrišite redove koje se odnose na txtZanimanje. Ovde se misli na prijavljivanje događaja Validacija i TextPromenjen, kao i red koji podešava svojstvo tag kontrole txtZanimanje na false. 7. U potpunosti uklonite metodu txtZanimanje_Validacija.
Dodavanje rutina za obradu događaja
Metod txtBox_TextPromenjen sadržao je test u kome smo proveravali da li je pozivajuća kontrola bila okvir za tekst txtOccupation. Za sada sigurno znamo da nije; zato ćemo promeniti metodu brisanjem bloka else if i promenom naredbe if, tako da kod treba da izgleda:
6
Na još jednom mestu radimo proveru vrednosti tekstualnog okvira koji smo uklonili - u metodi ValidateAll (). Potpuno izbrišite postojeće provere i unesite sledeći kod:
Pošto koristimo polje za potvrdu, umesto okvira za tekst, znamo da korisnik ne može uneti nekorektan podatak, jer će on ili ona uvek biti ili programer, ili neće biti programer. Takođe, znamo da je korisnik ili muško ili žensko. A pošto smo podesili osobinu jednog radio dugmeta na true, nemoguće je da korisnik izabere neispravan podatak. Stoga, jedino što preostaje da se uradi jeste izmena teksta u kome nalazimo pomoć, i izlaznog teksta. Ovo radimo u rutini za obradu događaja dugmeta:
U metodi za dugme OK promene su malo interesantnije:
Prvi od novih redova, koji je naglašen, prikazuje zanimanje korisnika. Proveravamo svojstvo Checked polja za potvrdu; ako je podešeno na true, prikazujemo niz znakova Programer. A ako je podešeno na false, prikazujemo Nije programer. Drugi red proverava samo radio dugme rdoZensko. Ako je svojstvo Checked podešeno na true, znamo da je korisnik žensko. Ako je podešeno na false, korisnik je muško. Pošto postoje samo dve moguće opcije, nema potrebe da proveravamo drugo radio dugme, jer će svojstvo Checked tog radio dugmeta uvek biti suprotno podešeno od svojstva Checked prvog radio dugmeta. Da smo imali vise od dva radio dugmeta, morali bismo proći kroz sve od njih, dok ne pronađemo ono kod kog je svojstvo Checked podešeno na true. Kada pokrenete ovaj primer, trebalo bi da dobijete nešto slično ovome: 7
Kao i običan okvir za tekst, kontrola RichTextBox (obogaćen okvir za tekst) izvedena je iz klase TextBoxBase. Zbog toga ovi okviri imaju neke sličnosti, ali je kontrola RichTextBox mnogo sadržajnija. Okvir za tekst koristimo za unos kratkih nizova znakova, dok obogaćeni tekstualni okvir koristimo za prikazivanje i unos formatiranog teksta (npr. polucrno, podvučeno ili kurziv). Ovo postižemo korišćenjem standarda za formatirani tekst koji se zove Rich Text Format (obogaćen tekstualni format) ili RTF. U prethodnom primeru, koristili smo standardni okvir za tekst. Mogli smo umesto toga koristiti i obogaćeni okvir za tekst. Kao što ćete videti u primeru koji sledi, možete ukloniti okvir za tekst pod nazivom txtOutput, i na njegovo mesto ubaciti obogaćeni okvir za tekst sa istim imenom. Program će se ponašati isto kao i ranije.
Kontrola RichTextBox
8
Svojstva kontrole RichTextBox
S obzirom na prednosti obogaćenog okvira za tekst, on ima i neke nove osobine. Sledeća tabela opisuje neke najčešće korišćene osobine: Ime osobine
CanRedo CanUndo RedoAc t i onName DetectUrls Rtf SelectedRtf
Dostupnost
Samo čitanje
Opis
Vrednost ove osobine je true, ako nešto što je poništeno može biti ponovljeno; u suprotnom je false. Vrednost ove osobine je true, ako je moguće izvršiti akciju Undo na obogaćeni okvir za tekst; u suprotnom je false. Ovo svojstvo sadrži ime akcije koja će biti korišćena da bi se ponovo uradila neka prethodno poništena radnja u obogaćenom okvira za tekst. Podesite ovu osobinu na true ako želite da kontrola detektuje URL adrese i da ih formatira (podvuče, kao u čitaču). Ovo odgovara svojstvu Text, s tim što je tekst u RTF formatu. Koristite ovu osobinu da biste dobili ili podesili izabrani tekst na RTF format. Tekst ovako kopiran u drugu aplikaciju, npr. MS Word, zadržava svoj format. Kao i SelectedRtf, možete dobiti ili podesiti izabrani tekst. Za razliku od prethodne osobine, pri kopiranju tekst ne zadržava svoj format. Ovo svojstvo predstavlja način poravnavanja izabranog teksta. Može biti Center, Left ili Right (centar, levo ili desno). Uz pomoć ove osobine možete saznati da li je neki deo teksta formatiran sa simbolom za nabrajanje, a možete umetati ili uklanjati simbol za nabrajanje. Koristite ovu osobinu da odredite za koliko piksela treba uvući simbol za nabrajanje. Dopušta vam da menjate boju izabranog teksta. Dopušta vam da menjate font izabranog teksta. Uz pomoć ove osobine možete podesiti ili saznati dužinu izabranog teksta. Ovo svojstvo sadrži informacije o izabranom delu. Red će vam da li je izabran neki OLE objekat ili je izabran samo tekst. Ako podesite ovo svojstvo na true, margina će se pojaviti na levoj strani kontrole RichTextBox. Ovo omogućava lakše biranje teksta. Uzima ime akcije koja će se koristi u ako korisnik želi da poništi neku radnju. Ako podesite ovu osobinu na true, možete odrediti da se određeni deo teksta ne menja.
Samo čitanje
Samo čitanje Čitanje/upis Čitanje/upis
Čitanje/upis
SelectedText SelectionAlignment SelectionBullet Bulletlndent SelectionColor SelectionFont SelectionLenght SelectionType ShowSelectionMargin UndoAc t i onName SelectionProtected
Čitanje/upis
Čitanje/upis
Čitanje/upis
Čitanje/upis Čitanje/upis Čitanje/upis Čitanje/upis Samo čitanje Čitanje/upis Samo čitanje
Čitanje/upis
Kao što možete videti, većina novih svojstava se odnosi na biranje. To je zato što se formatiranje odnosi na onaj deo teksta koji je korisnik izabrao. Ukoliko nikakav izbor nije napravljen, formatiranje će započeti od tačke u tekstu gde je postavljen kursor, a koja se naziva tačka umetanja.
9
Većina događaja koji se koriste u obogaćenim okvirima za tekst, isti su kao i za obične okvire za tekst. Ima i nekoliko novih: Ime osobine LinkedClick Protected Opis
Ovaj događaj se šalje kada korisnik pritisne vezu unutar teksta. Ovaj događaj se šalje kada korisnik pokuša da promeni tekst koji je označen kao zaštićen. Ovaj događaj se šalje kada želite nešto da izmenite u izabranom tekstu. Ako iz bilo kojih razloga ne želite da dopustite korisniku da menja izabrani tekst, možete da ga sprečite pomoću ovog događaja.
Događaji kontrole RichTextBox
SelctionChanged
Vežba br. 24.
U ovom primeru kreiraćemo krajnje jednostavan program za uređivanje teksta, koji pokazuje kako da izmenite osnovno formatiranja teksta i kako da učitate i snimite tekst iz obogaćenog okvira za tekst. Zbog jednostavnosti, učitavaćemo iz fiksirane datoteke i snimaćemo u nju. Napravite novi projekat konzolne aplikacije birajući File | New | Project... iz menija: Izaberite Visual C# Projects direktorijum unutar prozora Project Types:, i tip projekta Windows Application u okviru prozora Templates: U okviru za tekst Location: promenite putanju u C:\Temp\SoftIng\LecturesCode\Vezba24 (ovaj će direktorijum biti automatski napravljen ukoliko već ne postoji), i ostavite podrazumevani tekst u okviru za tekst Name: Kontrola RichTextBox. Otvorite paletu Properties i za kontrolu forme podesite sledeće osobine: Osobina (Properties) Name Text StartPosition Font FormBorderStyle Size Vrednost (Value) fclsMain Kontrola RichTextBox CenterScreen Microsoft Sans Serif, Regular, 8, Central European FixedSingle 486; 305
Na formu postavite 7 kontroli tipa Button, jednu kontrolu Label, jednu kontrolu TextBox i jednu kontrolu tipa RichTextBox. Podesite njihova svojstva redom prikazano u tabelama. Osobina (Properties) Name Text Cursor Location Size Vrednost (Value) za kontrolu Button1
btnBold &Bold 71; 8
Button2
btnItalic &Italic 159; 8
Button3
btnUnderline &Underline 247; 8
Button4
btnCentar &Centar Hand 335; 8 75; 23
Button5
bthLoad &Load 155; 240
Button6 Button7
btnSave &Save 251; 240 btnIzlaz &Izlaz 400; 240
10
za TextBox1 Osobina (Properties) Name Text Location Size Vrednost (Value) txtVelicinaFonta 8 244; 40 40; 20
Na formu postavite kontrolu tipa RichTextBox. I postavite svojstva kao u sledećoj tabeli. Osobina (Properties) Name Location Size rtfText 0; 64 480; 168 Vrednost (Value)
Podesite svojstva Anchor kontrola kao u tabeli: Ime kontrole btnLoad i btnSave rtfText Sve ostale Anchor vrednosti Buttom Top, Left, Bottom, Right Top
Podesite svojstvo MinimumSize formulara da bude isto kao svojstvo Size.
11
Dodavanje rutina za obradu događaja
Ovim smo završili sa izgledom formulara i prelazimo na kod. Dvaput pritisnite na dugme Bold da biste dodali ratinu za obradu za Click događaj. Ovako izgleda kod:
Počinjemo proverom fonta koji je korišćen u trenutno izabranom tekstu i dodelimo taj font lokalnoj promenljivoj. Zatim, proverimo da li je izabrani tekst već formatiran kao polucrn. Ako jeste, onda to vise neće biti; u suprotnom želimo da podesimo da bude polucrn. Kreiramo novi font koristeći oldFont kao prototip, a dodajemo ili uklanjamo polucrni stil, zavisno od potrebe. Na kraju, dodeljujemo novi font izabranom tekstu i vraćamo fokus na kontrolu RichTextBox. Rutine za obradu za btnltalic i btnUnderline su slime kao i prethodne, s tim što proveravamo odgovarajuće stilove. Dva puta pritisnite na dugmad Italic i Underline i dodajte sledeći kod:
12
Dvaput pritisnite na poslednje dugme za formiranje, Center, i dodajte sledeći kod:
Ovde moramo proveriti još jednu osobinu, SelectionAlignment, da bismo videli da li je izabrani tekst već centriran. HorizontalAlignment može uzimati vrednosti iz enumeracije, koje mogu biti Left, Right, Center, Justify ili NotSet. U ovom slučaju jednostavno proverimo da li je podešeno na Center, i ako jeste, poravnamo tekst po levoj ivici. A ako nije, podesimo tekst na centar. Poslednje formatiranje koje ćemo uraditi jeste podešavanje veličine teksta. Dodajemo dve ratine za obradu događaja za tekstualni okvir Size: jedan za kontrolu unosa i drugi koji detektuje da li je korisnik završio unos podatka. Dodajte sledeći kod u konstruktor formulara:
Ove dve rutine za obradu videli smo u prethodnom primeru. Obe koriste pomoćnu metodu ApplyTextSize, koja uzima string sa veličinom teksta:
13
Ono što nas zanima dešava se u pomoćnoj metodi ApplyTextSize. Ova metoda poči..."
|
You need to upgrade your Flash Player , or try to enable javascript in order see this document properly.
|
|