Visual Basic.NET – 5. diel

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

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, MaximumValue. 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:
  

Návrh okna
 

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:

Miešanie farieb
 

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

Neprehliadnite: