Peter Hrdlica / 28. 12. 2009, 10:46
A tretí diel je tu! Opäť nové ovládacie prvky, opäť nové funkcie a opäť vhodne zvolené množstvo obrazovej dokumentácie!
Úvod
Vítam Vás pri ďalšom, tento krát treťom pokračovaní seriálu o programovaní vo VB.NET. Dnes si ukážeme ako vytvoriť dobre známe „vyskakovacie“ okná, ako s nimi narábať a priblížime si dva nové prvky – zaškrtávacie pole CheckBox a pole výberu RadioButton. Prajem príjemné chvíle pri čítaní.
Message Box (ďalej MsgBox) je špeciálne dialógové okno, ktoré ma v podstate dve funkcie. Buď užívateľa na niečo upozorní zobrazením dát, alebo mu dá možnosť urobiť nejaké rozhodnutie.
Keďže je vo VB.NET viac spôsobov ako toto dialógové okno zobraziť, ukážeme si teraz postupne tie najľahšie z nich.
Spôsob prvý
MsgBox(zobrazený text, výzor okna a tlačítka, nadpis)
Tento zápis obsahuje iba tieto tri parametre. V tomto prípade je prvý parameter nevyhnutný, keďže prázdne okno sa zobraziť nedá. Ak neuvediete zvyšné dva, tak sa dialógová správa zobrazí s prednastaveným nadpisom Vašej aplikácie (Assembly name) a tlačidlom „Ok“ bez obrázka.
Tento krát si ukážeme ako priradíme iné tlačidlá a nadpis – pozorný a šikovný čitateľ to už určite zvládne aj sám podľa parametrického zápisu.
MsgBox("hello, world", MsgBoxStyle.OkCancel, "Môj prvý MSG box")
MsgBoxStyle.OkCancel – je, ako už názov udáva, štýl udávajúci výzor dialógového okna. Po napísaní čiarky za textom sa nám vyroluje kompletný zoznam s možnosťami na štylizovanie okna.
Tento zápis nám dá nasledujúci výsledok:
Niečo tomu ale ešte chýba, však? Správne, je to obrázok. Obrázok pre MsgBox je rovnako ako tlačidlá deklarovaný cez MsgBoxStyle, takže aby sme mohli upraviť aj tlačidlá aj obrázok, je potrebné zápis urobiť podľa nasledujúceho postupu:
MsgBox("hello, world", MsgBoxStyle.Information Or MsgBoxStyle.OkCancel, "Môj druhý MSG box")
Rovnakým spôsobom možno nastaviť aj to, ktoré tlačidlo má byť prednastavené (v našom prípade je to tlačidlo OK) a to pomocou MsgBoxStyle.DefaultButton2 - pre druhé tlačidlo. Zápis druhého parametru je jednoduchší v druhom spôsobe, ktorý si predstavíme.
Jednotlivé tlačidlá (‚prednastavenosť‘) aj obrázky však môžu byť zastúpené aj číselnou hodnotou podľa nasledovných tabuliek:
MsgBoxStyle |
Hodnota |
Tlačidlá |
OkOnly |
0 |
Ok |
OkCancel |
1 |
Ok, Cancel (Zrušiť) |
AbortRetryIgnore |
2 |
Abort, Retry, Ignore (Prerušiť, Opakovať, Ignorovať) |
YesNoCancel |
3 |
Yes, No, Cancel (Áno, Nie, Zrušiť) |
YesNo |
4 |
Yes, No (Áno, Nie) |
RetryCancel |
5 |
Retry, Cancel (Opakovať, Zrušiť) |
MsgBoxStyle |
Hodnota |
Prednastavené |
DefaultButton1 |
0 |
Prvé tlačidlo |
DefaultButton2 |
256 |
Druhé tlačidlo |
DefaultButton3 |
512 |
Tretie tlačidlo |
MsgBoxStyle |
Hodnota |
Obrázok |
Critical |
16 |
|
Question |
32 |
|
Exclamation |
48 |
|
Information |
64 |
|
Jednotlivé hodnoty sa dajú navzájom kombinovať = sčítať. Takže ak by sme pre náš príklad s prednastaveným druhým tlačidlom chceli miesto deklarácie MsgBoxStyle použiť číselnú hodnotu, príkaz by vyzeral nasledovne:
MsgBox("hello, world", 321, "MsgBox s číselnými hodnotami")
Odpovede, potrebujem odpovede!
Už vieme ‚vypľuť‘ na obrazovku MsgBox, vieme urobiť aby vyzeral pekne, ale stále nevieme zistiť na aké tlačidlo užívateľ klikol keďže odozva z opačnej strany je to čo robí dialóg dialógom, tak si to si práve teraz ukážeme.
Prvý spôsob predpokladá, že program / užívateľ si nebude potrebovať pamätať na aké tlačidlo klikol. Tento spôsob je možné použiť napríklad pri pýtaní sa užívateľa na povolenie vypnutia aplikácie.
If MsgBox("Chcete ukončiť program?", 292, "Otázka") = MsgBoxResult.Yes Then
End
End If
Rozbor:
MsgBoxResult je na rozdiel od MsgBoxStyle slúži na rozoznanie výsledku stlačeného tlačidla. Tieto hodnoty sa dajú taktiež zameniť číslami a to nasledovne:
Tlačidlo |
Príkaz |
Hodnota |
Ok |
MsgBoxResult.Ok |
1 |
Zrušiť |
MsgBoxResult.Cancel |
2 |
Prerušiť |
MsgBoxResult.Abort |
3 |
Opakovať |
MsgBoxResult.Retry |
4 |
Ignorovať |
MsgBoxResult.Ignore |
5 |
Áno |
MsgBoxResult.Yes |
6 |
Nie |
MsgBoxResult.No |
7 |
Zápis by teda mohol vyzerať aj takto:
If MsgBox("Chcete ukončiť program?", 292, "Otázka") = 6 Then
End
End If
Ak chceme zaznamenať, ktoré tlačidlo bolo stlačené, môžeme to urobiť v rámci If-u, alebo si na to môžeme vytvoriť premennú a vrátenú hodnotu jej priradiť priamo a následne s ňou pracovať kdekoľvek v kóde :
Dim i As Byte
i = MsgBox("Chcete ukončiť program?", 292, "Otázka")
Ak sa chcete presvedčiť, či to funguje, nie je nič jednoduchšie ako na formulár nakresliť prvok Label a priradiť mu hodnotu i.
Label1.Text = i
Spôsob druhý
Ako som sľuboval, ukážeme si viac spôsobov ako zavolať funkciu na zobrazenie dialógového okna. Tento spôsob má viac parametrov, avšak o to jednoduchšie sa s nimi dá pracovať.
MessageBox.Show(text, nadpis, tlačidlo, obrázok, prednastavené tlačidlo, rôzne nastavenia, tlačidlo pomoci)
Náš príklad by sme týmto spôsobom zapísali nasledovne:
MessageBox.Show("hello, world", "Metóda MessageBox.Show()", _ MessageBoxButtons.OKCancel, MessageBoxIcon.Information, _
MessageBoxDefaultButton.Button1)
Znak _ (podtržník) iba určuje zalomenie príkazu, aby prekladač vedel, že ste príkaz neukončili nesprávne, ale že pokračuje na ďalšom riadku. Použil som ho preto, lebo by sa nezmestil na šírku stránky.
V tomto zápise opäť platí, že je povinný iba prvý parameter, no na rozdiel od predošlého spôsobu, tu nemožno nahrádzať MessageBox funkcie číselnými hodnotami.
Parameter rôzne nastavenia sa môže použiť napríklad pre formátovanie textu sprava doľava ako MessageBoxOptions.RtlReading ai.
Prvok CheckBox – ‚štvorček s fajkou‘
Ďalším známym a dôležitým prvkom je zaškrtávacie políčko - CheckBox. Najčastejšie ho nájdeme v rôznych nastaveniach aplikácií, alebo dokonca aj na rôznych portáloch a fórach kde potvrdzujete napr. automatické prihlasovanie.
Jednou z možností ako použiť tento prvok po zaškrtnutí – odškrtnutí je priamo v primárnom handlery CheckBox1_CheckedChanged a to:
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
Button1.Enabled = Not Button1.Enabled
End Sub
Funkciu Not si môžeme priblížiť pomocou matematických operácií s výrokmi. Jedná sa totiž o funkciu, ktorá neguje pôvodný výrok. Ak budeme negovať výrok: „Súčin dvoch záporných reálnych čísel je kladný“ dostaneme výrok: „Súčin dvoch záporných reálnych čísel nie je kladný“ a naopak. V našom prípade teda prekladač najprv zistí stav tlačidla a potom ho zneguje. Viditeľné skryje a naopak.
Ak chceme zisťovať stav CheckBoxu kdesi inde v našom kóde, použijeme If:
If CheckBox1.Checked = True Then
' tieto príkazy sa vykonajú, ak je políčko zaškrtnuté
' tu bude nasledovať blok príkazov
' - apostrof na začiatku riadku znamená komentár
' nič takto zakomentované sa nevykoná
End If
Rovnakým spôsobom sa dá skontrolovať opačný stav a to ako:
If CheckBox1.Checked = False Then
Prvok RadioButton – prepínač
RadioButton je podobný predchádzajúcemu prvku. Hlavný rozdiel je však v tom, že CheckBoxov môže byť naraz zaškrtnuté ľubovoľné množstvo, na rozdiel od toho RadioButton v jednom kontajnery vždy iba jeden. Kontajnerom sa rozumie napríklad aj GroupBox, alebo proste hlavný formulár aplikácie.
Nakreslite si na okno niekoľko týchto prvkov a aplikáciu spustite v režime ladenia (kláves F5, alebo šípka s popisom „Start Debugging“). Ihneď po nabehnutí sa Vám prvý nakreslený prvom zaškrtne, alebo v tomto prípade skorej ‚zabodkuje‘. Je to z dôvodu toho, aby bol užívateľ prinútený, nejaký výber urobiť.
Jednoduchá ukážka použitia v handlery tlačidla pre tri RadioButton na formuláry:
If RadioButton1.Checked = True Then
Label1.Text = "Výber - č.1"
ElseIf RadioButton2.Checked = True Then
Label1.Text = "Výber - č.2"
ElseIf RadioButton3.Checked = True Then
Label1.Text = "Výber - č.3"
End If
Tento zápis, sa dá zjednodušiť, keďže sú tri možnosti platnosti podmienky a jedna z nich vždy musí platiť:
If RadioButton1.Checked = True Then
Label1.Text = "Výber - č.1"
ElseIf RadioButton2.Checked = True Then
Label1.Text = "Výber - č.2"
Else
Label1.Text = "Výber - č.3"
End If
Záver
Chcem Vám pri programovaní a jeho učení sa popriať veľa zdaru, pevných nervov a čo najmenej chýb v kóde. Dúfam, že sa Vám aj tento diel páčil a verím, že sa stretneme aj nabudúce.
Ďakujem za pozornosť a prajem pekný zvyšok dňa.
Peter Hrdlica
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk