Serißl - 5. dφl
Zßkladnφ ovlßdacφ prvky - pokraΦovßnφ

9. Zßkladnφ ovlßdacφ prvky
    9.4. CheckBox, OptionButton a Frame (kapitoly 9.1. - 9.3. v p°edchozφm dφlu)
10. ListBox a ComboBox
    10.1. ListBox
    10.2. ComboBox
11. Timer


Dnes budeme pokraΦovat v seznamovßnφ s dalÜφmi nejpou₧φvan∞jÜφmi ovlßdacφmi prvky. NauΦφte se pou₧φvat CheckBox, OptionButton, ComboBox, ListBox, Frame a Timer. I kdy₧ ListBox, ComboBox i Timer pat°φ mezi ty zßkladnφ, zvolili jsme pro n∞ zvlßÜtnφ kapitolu.

9. Zßkladnφ ovlßdacφ prvky

9.4. CheckBox, OptionButton a Frame

CheckBox m∙₧eme do ΦeÜtiny p°elo₧it jako zatrhßvacφ polφΦko. Nabφzφ u₧ivateli na v²b∞r dv∞ mo₧nosti, zapnuto nebo vypnuto. Je-li zobrazen k°φ₧ek, X, je zapnuto, bez X je vypnuto. Existuje jeÜt∞ t°etφ mo₧nost, kterß neb²vß tak Φasto pou₧φvßna. M∙₧eme jej popsat jako zeÜedlΘ X a je mo₧nΘ jej b∞₧n∞ vid∞t u instalacφ, p°i v²b∞ru u₧ivatelskΘ a vybrßnφ pouze n∞kolika polo₧ek z podnabφdky. Vrßtφte-li se do hlavnφ nabφdky, CheckBox je zatr₧en, X, ale s Üed²m pozadφm. Lze jej vyu₧φt k r∙zn²m ·Φel∙m nap°. neznßmß nebo nejednoznaΦnß hodnota.

Vlastnost, kterß umo₧≥uje zjistit, v jakΘm stavu se CheckBox nachßzφ, je Value. M∙₧e nab²vat, jak vypl²vß z v²Üe uvedenΘho, t°φ hodnot. 0, neboli nezatr₧eno (Unchecked), 1, neboli zatr₧eno (Checked) a 2, neboli Grayed (Φesk² v²raz nßs bohu₧el nenapadl). DalÜφ vlastnostφ je Style, pomocφ kterΘ nastavφte vzhled jako standardnφ nebo jako tlaΦφtko. Jinak je tento prvek vybaven b∞₧n²mi vlastnostmi, jako jsou Visible, Enabled, Font atd., a udßlostmi pro prßci s myÜφ a klßvesnicφ.

Pro popsßnφ OptionButtonu si budeme muset vysv∞tlit pojem Kontejner prvk∙. Prvkem, kter² mß tuto vlastnost je t°eba formulß°. Lze do n∞j toti₧ vklßdat prvky. Podobn∞ vÜak mohou fungovat i samotnΘ prvky jako t°eba Frame, PictureBox aj.. Pro nßÜ ·Φel je ovÜem nejvhodn∞jÜφ Frame. Jednß se o velice jednoduch² prvek u kterΘho m∙₧ete nastavit titulek (Caption) a typ okraje (BorderSyle) ale i dalÜφ b∞₧nΘ vlastnosti jako barvy, font apod.. Co se udßlostφ t²Φe, liÜφ se Frame od CheckBoxu tφm, ₧e mu chybφ udßlosti pro prßci s klßvesnicφ. Dßle se tento prvek hodφ pro optickΘ d∞lenφ formulß°e na menÜφ a p°ehledn∞jÜφ Φßsti. Viditelnost prvk∙, kterΘ na n∞j vlo₧φte je vymezena jeho velikostφ. V p°φpad∞, ₧e s nφm pohnete, budete automaticky h²bat i se vÜemi prvky na n∞m. Dßle asi narazφte na problΘm, ₧e nem∙₧ete rßmcem oznaΦit n∞kolik prvk∙ v Framu. To vy°eÜφte tφm, ₧e p°ed v²b∞rem rßmcem zmßΦknete klßvesu Shift a budete ji dr₧et. P°i prßci v k≤du se vÜak nic nem∞nφ. Neodkazujete se p°es pat°iΦn² Frame, ale p°φmo p°es jmΘno, jakΘ mß.

OptionButton pracuje podobn∞ jako CheckBox. OptionButton mß vÜak pouze dva stavy, zjistitelnΘ takΘ z vlastnosti Value, a to True nebo False, tzn. zda je vybrßn nebo ne. Na jednom Kontejneru prvk∙ m∙₧e b²t pouze jeden OptionButton, kter² mß Value rovno True. Jestli₧e chceme pou₧φt vφce skupin OptionButton∙ musφme k tomuto vyu₧φt prvku, kter² je Kontejner prvk∙. Pro tento ·Φel vyu₧ijeme prßv∞ zmi≥ovan² Frame. Takto zajistφme, ₧e je mo₧nΘ aby u vφce OptionButtton∙ bylo nastavenu vlastnost Value na True. OvÜem v rßmci jednoho kontejneru existuje v₧dy pouze jeden takov². Jakmile u₧ivatel na n∞kter² klikne, tzn. nastavφ Value rovno True, u ostatnφch se automaticky nastavφ False. Stejn∞ to funguje i p°i nastavovßnφ z k≤du. Z toho vypl²vß, ₧e OptionButton se pou₧φvß pro v²b∞r jednΘ polo₧ky z vφce nabφzen²ch. Stejn∞ jako CheckBox mß i OptionButton vlastnost Style, kterou nastavφme standardnφ vzhled nebo vzhled tlaΦφtka. Co se t²Φe vlastnostφ a udßlostφ jsou stejnΘ jako u CheckBoxu.

Ve zkratce si ukß₧eme jednoduch² p°φklad, jeho₧ kompletnφ provedenφ naleznete zde. Na formulß° vlo₧te t°i Framy. Prvnφ se bude jmenovat fraWS s titulkem (Caption) "WindowsState", druh² bude fraMP s titulkem "MousePointer" a poslednφ bude fraA s titulkem "Appearance". Kdy₧ se podφvßte na vlastnosti formulß°e zjistφte, ₧e titulky fram∙ odpovφdajφ exitujφcφm vlastnostem. NßÜ progrßmek bude nastavovat prßv∞ tyto vlastnosti. Vytvo°te v ka₧dΘm Framu pat°iΦnΘ mno₧stvφ OptionButton∙, jejich₧ poΦet a nßzvy budou odpovφdat nabφdce hodnot u p°φsluÜnΘ vlastnosti (u vlastnosti MousePointer vynechejte poslednφ hodnotu 99 - Custom). V ka₧dΘm Framu vytvo°φte z OptionButton∙ pole prvk∙ s nßzvy optWS, optMP a optA (oproti Fram∙m jsou zm∞n∞ny pouze p°edpony naznaΦujφcφ typ prvku). U Φφslovßnφ pole prvk∙ pomocφ vlastnosti Index zachovßvejte po°adφ tak, aby nap°. platilo ₧e Index prvku s nßzvem Hourglass byl roven 11. Dßle p°φmo na formulß° dopl≥te t°i CheckBoxy, s titulky jednotliv²ch Fram∙ a nßzvy chbWS, chbMP a chbA (zase se zm∞nily pouze p°edpony, tak₧e je k≤d dφky tomu p°ehledn∞jÜφ). Pomocφ nich budeme vypφnat jednotlivΘ Framy. V²sledn² formulß° m∙₧e vypadat t°eba takto.

Te∩ doplnφme k≤d. Zde uvedeme nejzßkladn∞jÜφ variantu, vy si ji vÜak m∙₧ete vylepÜit tak, aby se zm∞ny promφtli nejen na formulß°i, ale na vÜech mo₧n²ch prvcφch. V p°ilo₧enΘm programu se na tato rozÜφ°enφ m∙₧ete podφvat.

Private Sub chbMP_Click()
  'Povolφ nebo zakß₧e nastavovßnφ kurzoru myÜi
  fraMP.Enabled = IIf(chbMP.Value = 1, True, False)
End Sub

Private Sub chbWS_Click()
  'Povolφ nebo zakß₧e nastavovßnφ stavu okna
  fraWS.Enabled = IIf(chbWS.Value = 1, True, False)
End Sub

Private Sub chbA_Click()
  'Povolφ nebo zakß₧e nastavovßnφ vzhledu okna
  fraA.Enabled = IIf(chbA.Value = 1, True, False)
End Sub

Private Sub optA_Click(Index As Integer)
  'Nastavφ u formulß°e vzhled
  frmMain.Appearance = Index
End Sub

Private Sub optMP_Click(Index As Integer)
  'Nastavφ u formulß°e a fram∙ kurzor myÜi
  frmMain.MousePointer = Index
  fraMP.MousePointer = Index
  fraA.MousePointer = Index
  fraWS.MousePointer = Index
End Sub

Private Sub optWS_Click(Index As Integer)
  'Nastavφ stavφ stav okna
  frmMain.WindowState = Index
End Sub

U nastavovßnφ vlastnosti WindowState budeme muset doplnit jeÜt∞ pßr °ßdk∙ k≤du, kter² zajistφ, ₧e kdy₧ nepou₧ijete pro zm∞nu stavu okna OptionButton∙, aby se zm∞ny promφtly ve zobrazenφ. K tomu vyu₧ijeme udßlosti formulß°e Resize.

Private Sub Form_Resize()
  optWS(frmMain.WindowState).Value = True
End Sub

Zp∞t na obsah


10. ListBox a ComboBox

Stejn∞ jako p°edchßzejφcφ prvky, pat°φ tyto dva k sob∞. Oba dva toti₧ vytvß°φ seznam polo₧ek, pouze jinak zobrazen². ListBox je jednoduchΘ okno, ve kterΘm jsou jednotliv∞ pod sebou se°azeny polo₧ky. ComboBox obsahuje takΘ vφce polo₧ek, zobrazuje vÜak pouze jednu, tu aktivnφ, kliknutφm na jeho tlaΦφtko se rozbalφ seznam, kde se ukß₧φ i ty ostatnφ.

10.1. ListBox

Jak jsme si u₧ °ekli, je hlavnφ funkcφ ListBoxu dßt u₧ivateli na v²b∞r jednu nebo vφce polo₧ek ze seznamu. Pokud poΦet polo₧ek v ListBoxu p°ekroΦφ poΦet, kter² m∙₧e b²t zobrazen (podle v²Üky - height - ListBoxu), je na pravou stranu automaticky p°idßn ScrollBar.

Polo₧ky se p°idßvajφ a ma₧ou metodami AddItem a RemoveItem. Ukß₧eme si nap°., jak vytvo°it ListBox v obrßzku naho°e.

List1.AddItem "Prvnφ polo₧ka"
List1.AddItem "Druhß polo₧ka"
List1.AddItem "T°etφ polo₧ka"
List1.AddItem "╚tvrtß polo₧ka"
List1.AddItem "Pßtß polo₧ka"
List1.AddItem "èestß polo₧ka"

èestß polo₧ka nenφ vid∞t, proto se na pravΘ stran∞ objevφ ScrollBar. V dalÜφm p°φkladu sma₧eme druhou a t°etφ polo₧ku pomocφ metody RemoveItem. Parametr je index polo₧ky, kterou chceme smazat (tady je nutno si uv∞domit, ₧e indexy jsou Φφslovßny od 0).

List1.RemoveItem 1
List1.RemoveItem 2

Chcete-li smazat cel² obsah ListBoxu, pou₧ijte metodu Clear. Nemß ₧ßdn² parametr, jednoduÜe vyma₧e cel² ListBox.

List1.Clear

Te∩ u₧ umφme do ListBoxu vklßdat i mazat polo₧ky. Je vÜak t°eba um∞t zjistit, kterou polo₧ku si u₧ivatel vybral abychom se mohli rozhodnout, co dßl. Zvolenou polo₧ku ListBox uklßdß do vlastnosti Text. Pokud nenφ vybrßna ₧ßdnß polo₧ka, je v tΘto vlastnosti °et∞zec dΘlky 0.

If Len(List1.Text)=0 Then 'funkce Len vracφ dΘlku °et∞zce
  MsgBox "Nebyla vybrßna ₧ßdnß polo₧ka"
Else
  MsgBox "Byla vybrßna polo₧ka " & List1.Text
End If

Vlastnost MultiSelect urΦuje, zda je mo₧no v ListBoxu vybrat vφce polo₧ek narßz. Standardn∞ je nastavena na 0, tzn. nelze jich vybrat vφce. Pokud tedy chcete u₧ivateli umo₧nit vybrat vφce polo₧ek, nastavte ji na 1 nebo 2. Hodnota 1 je tzv. jednoduch² v²b∞r, kliknutφm myÜi nebo stiskem mezernφku je polo₧ka vybrßna, op∞tovn²m stiskem je vybrßnφ zruÜeno. Hodnota 2 nastavφ klasickΘ vybφrßnφ ve Windows pomocφ klßves SHIFT a CONTROL. V obou t∞chto p°φpadech vÜak ji₧ nem∙₧ete zjiÜ¥ovat vybranΘ polo₧ky pomocφ vlastnosti Text. Musφte projφt cel² ListBox polo₧ku po polo₧ce a pomocφ vlastnosti Selected zjistit, zda je vybrßna. Vlastnost Selected mß jeden parametr a tφm je index prvku, o kterΘm chceme v∞d∞t, zda byl vybrßn.

Dim i As Long

For i = 0 To List1.ListCount - 1
  If List1.Selected(i) Then 'znamena totez jako If List1.Selected(i)=True Then
    MsgBox "Polo₧ka Φφslo " & i & " byla vybrßna"
    MsgBox "Text polo₧ky " & i & " je " & List1.List(i)
  End If
Next i

V tomto k≤du jsme pou₧ili pro vßs do te∩ neznßmou vlastnost List. Tato vlastnost mß stejn∞ jako Selected jeden parametr, kter²m je index prvku. Vracφ text, kter² obsahuje prvek seznamu s tφmto indexem.

Nebudeme si zde vyjmenovßvat vÜechny vlastnosti, kterΘ ListBox mß. Proto na zßv∞r jeÜt∞ t°i, kterΘ by se Vßm mohli hodit. Pokud nastavφte vlastnost Sorted na True, budou vÜechny polo₧ky automaticky t°φd∞ny. Vlastnost Style zase urΦuje, zda bude ListBox takov², jak² u₧ jej znßte, nebo se u ka₧dΘ polo₧ky objevφ CheckBox. Jeho zatr₧enφm je pak polo₧ka vybrßna. No a t°etφ vlastnost je Columns. Ta urΦuje poΦet sloupc∙, do kter²ch se budou polo₧ky zobrazovat.

Udßlosti, kterΘ se u ListBoxu vyu₧φvajφ nejvφce jsou Click a DblClick. Jak vypl²vß z jejich nßzvu, Click nastßvß p°i kliknutφ myÜi na n∞jakou polo₧ku seznamu, DblClick p°i dvojkliku na polo₧ku. Ani jedna z t∞chto udßlostφ nemß ₧ßdn² parametr (nap°. text polo₧ky, na kterou u₧ivatel kliknul).

Private Sub List1_Click()
  MsgBox "vybrßna polo₧ka " & List1.Text
End Sub

Zp∞t na obsah


10.2. ComboBox

ComboBox je zp∙sobem prßce velice podobn² ListBoxu. Polo₧ky se p°idßvajφ a ma₧ou takΘ pomocφ udßlostφ AddItem a RemoveItem. Cel² obsah jde smazat op∞t pomocφ metody Clear. Text vybranΘ polo₧ky zjistφte takΘ z vlastnosti Text. U ComboBoxu vÜak nem∙₧eme testovat, zda byla vybrßna polo₧ka pomocφ dΘlky °et∞zce Text. Pokud toti₧ tuto vlastnost p°ed pou₧φvßnφm nenastavφte na prßzdn² °et∞zec, obsahuje nßzev prvku. NejΦast∞ji se to d∞lß tak, ₧e naplnφte ComboBox polo₧kami a do vlastnosti Text ulo₧φte prvnφ polo₧ku seznamu.

Combo1.AddItem "Prvnφ"
Combo1.AddItem "Druhß"
Combo1.AddItem "T°etφ"
Combo1.Text = "Prvnφ"

Nebo je mo₧nΘ (v∞tÜinou toti₧ polo₧ky nevklßdßte takto, ale nap°φklad v²b∞rem z n∞jakΘho souboru databßze nebo pole) nastavit p°φmo prvnφ polo₧ku takto:

Combo1.Text = Combo1.List(0)

Vlastnost List pracuje stejn∞ jako u ListBoxu, tzn. vracφ text polo₧ky, jejφ₧ index zadßme jako parametr.

ComboBox mß takΘ vlastnost Style. UrΦuje chovßnφ ComboBoxu p°i v²b∞ru polo₧ek. Mß t°i hodnoty. Nastavenφm na 0 (default), m∙₧ete vybφrat polo₧ky ze seznamu nebo napsat jak²koliv jin² text. Nastavenφm na 1 (v tomto p°φpad∞ musφte ComboBox trochu zv∞tÜit - na v²Üku) se jako kdyby zm∞nφ v TextBox a ListBox spojenΘ dohromady. Ve skuteΦnosti je to stejnΘ jako p°i nastavenφ na 0, pouze s tφm rozdφlem, ₧e je ComboBox stßle rozbalen², tzn. jako kdyby u₧ivatel kliknul na tlaΦφtko se Üipkou. Nastavenφm na hodnotu 2 vypadß ComboBox zase normßln∞, u₧ivatel si vÜak m∙₧e vybrat pouze ze seznamu, nelze napsat jin² text.

U udßlostφ je to takΘ podobnΘ. Pouze s tφm rozdφlem, ₧e se moc nepou₧φvß DblClick, proto₧e na polo₧ku seznamu dvakrßt kliknout nelze, mφsto toho se vÜak pou₧φvß Change. U₧ivatel toti₧ v∙bec nemusφ seznam rozbalit, m∙₧e rovnou napsat text (pokud samoz°ejmn∞ nenφ Style nastaveno na hodnotu 2). A tehdy nastane udßlost Change. Je t°eba si takΘ uv∞domit, ₧e Change nastane p°i jakΘkoliv zm∞n∞ dat v ComboBoxu, nap°. p°i vklßdßnφ polo₧ky , proto mßte-li n∞jak² k≤d v tΘto udßlosti, bude vyvolßna v₧dy p°i pou₧itφ AddItem.

Zp∞t na obsah


11. Timer

Timer je snad nejjednoduÜÜφ prvek ve Visual Basicu, co se t²Φe pou₧φvßnφ. Mß pouze jednu udßlost Timer, kterß je vyvolßvßna v zadanΘm intervalu. Z toho vypl²vß pou₧itφ. Pokud pot°ebujete n∞co provßd∞t opakovan∞ v ΦasovΘm intervalu, pou₧ijte Timer. D∙le₧itΘ jsou u n∞j pouze dv∞ vlastnosti. Interval, co₧ je poΦet milisekund mezi volßnφm udßlosti Timer a Enabled, kterß nab²vß dvou hodnot. True znamenß, ₧e se udßlost vyvolß, False, ₧e ne (v p°φpad∞, ₧e u₧ Φinnost provßd∞t nechcete). Je logickΘ, ₧e pokud nastavφte interval opakovßnφ nap°. na tisφc milisekund a nestihnete v udßlosti za tu dobu vÜe vykonat, dalÜφ udßlost se nevyvolß, dokud Φinnost nevykonßte. Proto si musφte dßt pozor, abyste stihli po dobu intervalu vÜe vykonat. Nap°.:

Private Sub Form_Load()
  Timer1.Interval = 2000 'dve sekundy
  Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
  Dim i As Long

  For i = 1 To 200000
    Print "cislo " & i 'vytiskne na formular text
  Next i
  Form1.Cls 'vymaze formular
End Sub

K≤d udßlosti Timer se nestihne za dv∞ sekundy provΘst, proto dalÜφ udßlost nastane a₧ po ukonΦenφ k≤du, tzn. ne ka₧dΘ dv∞ sekundy.

Abyste lΘpe pochopili, jak Timer funguje, vyzkouÜejte jednoduch² p°φklad na jeho pou₧itφ. Trochu k≤du se v n∞m t²kß i ComboBoxu a ListBoxu.

Zp∞t na obsah