Peter Hrdlica / 18. 02. 2010, 08:45
Dnes sa pozrieme na podmienenú štruktúru Select Case (switch = prepínač) a základnú prácu s ovládacím prvkom PictureBox. A samozrejme nebude chýbať obrazová dokumentácia.
Úvod
Dobrý deň. Dnes sa pozrieme na podmienenú štruktúru Select Case (switch = prepínač) a základnú prácu s ovládacím prvkom PictureBox. Dúfam, že sa opäť dozviete niečo nové a zaujímavé. Prajem príjemné čítanie.
Select Case .. Case .. End Select – Keď nie je vhodný podmienený príkaz If
Predstavme si na chvíľu, že v našom programe bude môcť určitá premenná nadobudnúť niekoľko rôznych hodnôt a v závislosti od hodnoty sa bude neskôr vykonávať iný príkaz. Jedna možnosť je použiť ako riešenie rozhodovaciu štruktúru If .. Then .. Elseif .. Else. No čím viac bude rôznych hodnôt premennej, tým viac bude v kóde sekcií Elseif, kvôli čomu bude pomalší a podstatne neprehľadnejší. Za týmto účelom v programovacích jazykoch existuje prepínač – v našom prípade Select Case .. Case .. End Select (v iných programovacích jazykoch sa môže nazývať napr. switch).
Všeobecný zápis je:
Select Case premenná
Case hodnota premennej č. 1
Príkazy, ktorí sa majú vykonať pre hodnotu č. 1
Case hodnota premennej č. 2, hodnota č. 3
Príkazy pre platnosť dvoch hodnôt premennej
Case rozsah začiatok To rozsah koniec
Príkazy pre číselné hodnoty premennej v určenom rozsahu
Case Else
Príkazy, ktoré sa vykonajú, keď premenná nemá žiadnu z predošlých hodnôt = predvolené príkazy
End Select
Príklad si ukážeme na prevode programového čísla dňa z funkcie Date.Now.DayOfWeek na slovenský názov.
Dim den As Integer = Date.Now.DayOfWeek
Select Case den
Case 0 'dni sa začínajú nulou a prvý deň je nedeľa
Label1.Text = "Nedeľa"
Case 1
Label1.Text = "Pondelok"
Case 2
Label1.Text = "Utorok"
Case 3
Label1.Text = "Streda"
Case 4
Label1.Text = "Štvrtok"
Case 5
Label1.Text = "Piatok"
Case 6
Label1.Text = "Sobota"
End Select
Pozn.: Pomocou charakteristík Date.Now môžeme pristupovať aj rôznym iným vlastnostiam dátumu ako napr.: deň v mesiaci, rok, môžeme zistiť či je daný deň piatok ap.
Pre porovnanie Vám ukážem ako by vyzeral tento kód zapísaný pomocou štruktúry If.
If den = 0 Then
Label1.Text = "Nedeľa"
ElseIf den = 1 Then
Label1.Text = "Pondelok"
ElseIf den = 2 Then
Label1.Text = "Utorok"
ElseIf den = 3 Then
Label1.Text = "Streda"
ElseIf den = 4 Then
Label1.Text = "Štvrtok"
ElseIf den = 5 Then
Label1.Text = "Piatok"
Else
Label1.Text = "Sobota"
End If
A pri zvyšovaní počtu možných hodnôt premennej to bude iba horšie a horšie, takže je vhodné v prípadoch, kedy premenná môže mať viac ako 3 hodnoty, používať štruktúru Select .. Case .. EndSelect.
Nasledujúci príklad nám ukáže ďalšie možnosti použitia podmienok v príkaze Case v štruktúre Select.
Dim mesiace As Integer = Date.Now.Month
Select Case mesiace
Case Is < (5 - 2)
Label1.Text = "zima"
Case 3 To 5
Label1.Text = "jar"
Case 6 To 8
Label1.Text = "leto"
Case 9, 10, 11
Label1.Text = "jeseň"
Case Else ' pre 12ty mesiac
Label1.Text = "zima"
End Select
V prvom príkaze Case je vidieť, že ako podmienky je možné použiť aj výsledky rôznych výpočtov alebo matematické, či logické operátory ako je v tomto prípade Is a <.
PictureBox – základné funkcie
Jedným z využití PictureBoxu je použiť ho ako kontajner pre obrázky. Tie možno zadať napr. pri návrhu aplikácie vybraním cesty v paneli vlastností kliknutím na Image. Tu možno vložiť priamo fyzickú cestu k obrázku uloženom niekde na Vašom disku, alebo načítať ho s Resources.rex, prípadne iného súboru s rôznymi zdrojovými dátami (o tom však až inokedy). Ďalší spôsob je dynamické načítanie obrázku za behu aplikácie pomocou nasledujúceho príkazu:
PictureBox1.Load("disk:cestakvasemuobrazku.koncovka")
Ďalšou dôležitou vlastnosťou, ktorú nájdete aj v paneli je vlastnosť SizeMode, ktorá určuje, ako sa má ovládací prvok správať v závislosti od načítaného obrázku. Táto vlastnosť sa dá nastaviť aj kliknutím na šípku v rohu ovládacieho prvku – viď obr.
SizeMode = Normal
Obrázok sa načíta do PictureBoxu tak, že sa umiestni do ľavého horného rohu a v prípade, že je zobrazovaný obrázok väčší ako prvok sa prečnievajúce časti odrežú.
SizeMode = StretchImage
Obrázok sa roztiahne, prípadne zmrští do veľkosti ovládacieho prvku, čo môže spôsobiť zmenu proporcií.
SizeMode = AutoSize
Veľkosť prvku PictureBox sa prispôsobí veľkosti načítaného obrázku. Zmení svoj rozmer v prospech zachovania proporcií.
SizeMode = CenterImage
Správa sa rovnako ako mód Normal s rozdielom, že obrázok sa do prvku vycentruje.
Posuvníky – HscrollBar a VScrollBar
Dôvod, prečo si teraz ukážeme základy posuvníkov je ten, že ich budeme potrebovať pri miešaní RGB farieb v nasledujúcom príklade. Ich najdôležitejšie vlastnosti sú Minimum, Maximum a Value. Minumum udáva najnižšiu hodnotu posuvníku, Maximum udáva maximálnu možnú hodnotu a Value aktuálnu hodnotu.
RGB – miešanie farieb na plátne PictureBoxu
PictureBox ako ovládací prvok neslúži iba na načítanie obrázkov, ale na prácu s grafikou všeobecne. My si teraz ukážeme ako na pozadí PictureBoxu možno miešať farby palety RGB. Nakreslite si teda na formulár ovládacie prvky približne nasledovne:
Pomocou posuvníkov budeme meniť farbu pozadia PictureBoxu a to tak, že každý posuvník zastupuje jednu farbu palety RGB. Najvrchnejší R, teda červenú, prostredný G, čiže zelenú a spodný B, čiže modrú. Prvky Label pod posuvníkmi budú udávať hodnotu tej ktorej farby. Maximálne hodnoty posuvníkov nastavíme podľa pravidla miešania paliet palety RGB a teda na hodnotu 255, čo nám zaručí maximálny počet farieb 16581375 (255 x 255 x 255).
Náš aktuálny postup bude ten, že pre každý posuvník napíšeme handler zvlášť (vhodnejší spôsob si ukážeme až v nasledujúcom diele) a bude teda vyzerať približne nasledovne:
Private Sub HScrollBar1_Scroll( … ) Handles HScrollBar1.Scroll
PictureBox1.BackColor = Color.FromArgb(HScrollBar1.Value, HScrollBar2.Value, HScrollBar3.Value)
Label1.Text = "RED: " & HScrollBar1.Value
End Sub
Rozbor:
- udalosť Scroll posuvníka sa vykoná vždy vo chvíli jeho pohybu
- o zmiešanie farieb sa stará funkcia Color.FromARGB(), ktorá má tri parametre = farby (v poradí červená, zelená, modrá) a my jej ich priraďujeme v závislosti na hodnote daných posuvníkov.
- vždy musíme priraďovať všetky tri parametre aj keď sa mení iba jeden
- každý Label bude zobrazovať hodnotu príslušnej farby
Pozorný čitateľ, ktorý sa dostal až sem, bude určite schopný napísať handlery aj pre ďalšie ScrollBary. Ak ste spravili všetko správne, výsledok by mohol vyzerať napr. takto:
Určite ste si už skôr všimli toho tmavšieho popisu pod PictureBox-om. Slúži na zobrazenie html kódu aktuálne zobrazovanej farby. V mojom kóde sa o to stará nasledovný príkaz:
Label4.Text = ColorTranslator.ToHtml(PictureBox1.BackColor)
Záver
Ak sa Vám podarilo dosiahnuť rovnakých výsledkov ako v mojich príkladoch tak mi opäť a zas neostáva nič iné ako Vám pogratulovať. Verím, že články sú písané zrozumiteľne a je z nich jednoduché vstrebávať informácie. Ak však máte akékoľvek pripomienky, nápady či želania, neostýchajte sa a pokojne mi napíšte na e-mailovú adresu. Prajem Vám príjemný 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