Programujeme vo Visual Basicu V.

Peter Hrdlica  /  19. 10. 2006, 00:00

Ako už z názvu vyplýva, jedná sa o cyklus, ktorému je vopred určené koľko krát sa má zopakovať, čiže koľko krát sa majú vykonať príkazy ktoré cyklus obsahuje. Ukážme si teda použitie tohto cyklu hneď na nejakom jednoduchom príklade.

Vytvoríme si malú aplikáciu, ktorá napíše písmeno „A“ toľko krát, koľko jej určíme a za každé písmeno dá medzeru. Vytvorme si teda na formulár jeden prvok TextBox, alebo ScrollBar, pomocou ktorého budeme zadávať počet písmen, ktoré chceme napísať, jeden prvok Label a tlačidlo, ktorým proces spustíme. Príslušný handler tlačidla bude vyzerať asi takto:

Private Sub Command1_Click()
For i = 1 To Text1.Text
Label1.Caption = Label1.Caption & "A "
Next i
End Sub

Rozbor: i je premenná typu Integer, ktorú sme si zadeklarovali v sekcii General. Prvý

riadok handleru sa dá preložiť takto: „Pre všetky i od 1 do x“, pričom x reprezentuje vložené číslo v prvku TextBox. Label1.Caption = Label1.Caption & "A " je príkaz, ktorý sa má vykonať pre každé i, čiže v našom prípade 15-krát. Takýchto príkazov tu môže byť ľubovoľný počet. Ešte je potrebné si všimnúť, že za písmenom A je medzera, aby bolo jednoduchšie písmená spočítať. A posledný príkaz Next i zabezpečuje prechod na ďalšiu hodnotu premennej i.



Program vypíše písmeno „A“ daný počet krát.


Ovládací prvok – ListBox



ListBox (angl. „zoznamové pole“) sa používa na vytváranie zoznamov ako už vyplýva z jeho názvu. Vytvorme teda na formulár prvok ListBox. Po vytvorení sa v prvku objaví iba položka „List“ rovnako ako pri TextBoxe či prvku Label. Ostatné prvky / iné prvky do zoznamu možno zadať dvomi spôsobmi a jedným z nich je položka List v panely vlastností. Položku otvorte pomocou rozbaľovacieho tlačidla napravo od nej a môže začať pridávať položky. Ak po pridaní prvej položky stlačíte Enter, tak si VB bude myslieť, že zoznam je hotový a úpravu zoznamu uzavrie. Ak chcete, prejsť na ďalšiu položku zoznamu, stlačte Ctrl+Enter. Zaujímavou vlastnosťou prvku ListBox je Sorted(angl. usporiadané). Ak ju nastavíte na True, tak po spustení programu sa všetky prvky zoznamu automaticky usporiadajú podľa abecedy.

Teraz sa naučíme pridávať položky do zoznamu za behu aplikácie. Ukážeme si to hneď na konkrétnom príklade. Do udalosti Form_Load() napíšeme handler:

List1.AddItem "Angličtina"
List1.AddItem "Nemčina"
List1.AddItem "Slovenčina"

Pre každú položku zoznamu je treba napísať handler. Ak by teda mal zoznam obsahovať 100 položiek, bolo by nutné príkaz List1.AddItem (add angl. pridať, item angl. položka) napísať 100 krát.



Prvok ListBox po pridaní položiek do zoznamu.

Prvky zo zoznamu sa samozrejme dajú aj vymazať. Pre názornú ukážku vymazávania prvkov zoznamu si najprv vytvorme zoznam, ktorý naplníme nasledovne pomocou cyklu For:

Private Sub Form_Load()
For i = 1 To 20
List1.AddItem i
Next i
End Sub

Prvky možno vymazať príkazom List1.RemoveItem index(remove angl. odobrať), kde index je číselné vyjadrenie pozície prvku. Prvý prvok zoznamu má index 0, čiže ak chceme vymazať prvý prvok zoznamu musíme napísať príkaz List1.RemoveItem 0. Ak chceme nasledovne vymazať ďalší prvok zoznamu, v našom prípade číslo 2, bolo by nesprávne písať List1.RemoveItem 1, pretože po vymazaní čísla 1 sa prvým prvkom zoznamu automaticky stane číslo 2 a teda zároveň nadobudne jeho index hodnotu 0. Po dvojnásobnom použití príkazu List1.RemoveItem 0 by teda bolo prvým prvkom zoznamu číslo 3. Na vymazanie celého zoznamu má VB osobitný príkaz a to List1.Clear (clear angl. vyčistiť). Tento príkaz nájde svoje využitie hlavne pri väčšom množstve prvkov.

List1.ListCount (count angl. počet) je ďalšou vlastnosťou prvku ListBox . Vo vlastnosti ListCount je zaznamenaný počet položiek zoznamu. Príkaz Label1.Caption = List1.ListCount, by v našom prípade po spustení programu vypísal číslo 20. Ak je potrebné vymazať posledný prvok zoznamu, dá sa k tomu použiť príkaz ListCount. Zrejme Vám napadlo napísať príkaz asi takto List1.RemoveItem List1.ListCount, avšak je tu chyba, ktorá by pri použití daného príkazu viedla k zrúteniu aplikácie. Už pred chvíľou sme spomínali, že prvý prvok zoznamu má hodnotu indexu 0 a z toho vyplýva, že teda posledný prvok bude mať index o 1 menší ako je maximálny počet prvkov. V našom prípade teda má číslo 20 index 19. Preto príkaz na vymazanie posledného prvku zoznamu vyzerá takto List1.RemoveItem List1.ListCount – 1.

Vytvorte si teraz na formulár dva prvky ListBox a ukážeme si ako preniesť prvok jedného zoznamu do zoznamu druhého. Prvý ListBox môžete naplniť pomocou cyklu For rovnakým spôsob ako sme si ukazovali pred chvíľou. Druhý ListBox ponecháme prázdny. Udalosť Click prvého zoznamu bude vyzerať nasledovne:

Private Sub List1_Click()
List2.AddItem List1.Text
End Sub

Príkaz List2.AddItem List1.Text možno vysloviť asi takto: „Do zoznamu číslo 2 pridaj prvok s textom rovnakým, na aký bolo kliknuté v zozname číslo 1.“



Vkladanie položiek zoznamu jedného do zoznamu druhého.


Ovládací prvok – ComboBox

Ovládací prvok ComboBox je veľmi podobný prvku ListBox a zároveň msa do neho dá písať ako do prvku TextBox. Je to teda akýsi hybrid týchto dvoch prvkov. Takisto sa jedná o zoznam, no tento krát je to rozbaľovací zoznam. Prvá položka ComboBoxu nie je prvou položkou zoznamu (index = 0), ale udáva ju vlastnosť Text rovnako ako pri TextBoxe. ComboBox je využitý napr. pri výbere písma v programe Microsoft Word.



Na ukážku práce s ComboBoxom upravíme predchádzajúci príklad. Nakreslite si teda na formulár dva prvky ListBox a medzi ne jeden ComboBox. Prvý ListBox môžeme opäť naplniť pomocou cyklu For. Handler toho ListBoxu má za úlohu preniesť prvok zoznamu do zoznamu prvku ComboBox. Handler je opäť veľmi jednoduchý, ale pre kontrolu Vášho zápisu ho uvediem:

Private Sub List1_Click()
Combo1.AddItem List1.Text
End Sub

Handler pre ComboBox vyzerá úplne podobne a verím, že pozorný čitateľ ho už napísať zvládne preto ho nebudem uvádzať. Avšak implicitná udalosť pre prvok ComboBox je Change, preto je ju treba zmeniť na Click, inak by sa do prvku ListBox zapisoval text prvku ComboBox a nie položka zoznamu, na ktorú ste klikli.

Pre druhý ListBox samozrejme nie je potrebné písať žiadny handler.



Táto malá aplikácia je dôkazom podobnosti prvkov ListBox a ComboBox.


Cyklus riadený podmienkou – While ... Wend

Už sme sa naučili používať podmienený príkaz If a cyklus s daným počtom opakovaní. Teraz sa naučíme pracovať s cyklom, ktorý sa bude riadiť istou podmienkou podobne ako príkaz If, čiže ak bude podmienka platiť 10-krát, tak sa vykoná 10-krát a ak bude platiť 1000-krát tak sa vykoná 1000-krát

Zápis cyklu vyzerá takto:

While podmienka
Príkazy, ktoré sa majú vykonať ak podmienka platí
Wend

Najjednoduchšie ako si vysvetliť cyklus je ukázať si ho na príklade. Najlepším príkladom, na ktorom si môžeme jednoducho a rýchlo vysvetliť fungovanie cyklu je zisťovanie či je dané číslo prvočíslo. Prvočíslo je také číslo, ktoré má len dva delitele a to seba samé a 1-ku.

Na formulár nakreslite jedno tlačidlo, jeden popis a jedno textové pole. Do textového poľa zadáme zisťované číslo, po kliknutí na tlačidlo prebehne handler, ktorý zistí či to číslo prvočíslo je, alebo nie a nakoniec sa vypíše do popisku.

Handler pre tlačidlo bude vyzerať nasledovne:

Private Sub Command1_Click()
cislo = Val(Text1.Text)
delitel = 2
While cislo Mod delitel <> 0
delitel = delitel + 1
Wend
If delitel = cislo Then
Label1.Caption = "Zvolené číslo je prvočíslo"
Else
Label1.Caption = "Zvolené číslo nie je prvočíslo."
End If
End Sub

Rozbor: Načítame si číslo z textového poľa a zadefinujeme si deliteľ na 2, pretože číslo 2 je najmenšie prvočíslo (program nie je zabezpečený proti vloženiu 0,1 alebo písmena, to si ukážeme až niekedy nabudúce). Mod = zvyšok po delení. Čiže ak sa na prvý pokus nebude rovnať zvyšok číslu 0, tzn. že číslo má ešte nejakého deliteľa. Podmienený príkaz už len vypíše na obrazovku výsledok skúmania. Ak chcete, aby Vám program vypísal akého deliteľa našiel, stačí za druhé priraďovanie textu popisu dopísať napr. príkaz ... & “Našiel sa deliteľ “ & delitel ...


Úlohy
  1. Upravte program na zisťovanie prvočísel tak, aby sa výsledok zisťovania vypísal do modálneho okna

  2. Napíšte program, ktorý do zoznamu vypíše pomocou cyklu For 20 riadkov po sebe nasledujúcich čísel (cyklus som v tomto článku už uviedol) a upravte ho tak aby následne ďalší cyklus s daným počtom opakovaní vymazal všetky párne čísla.

Neprehliadnite: