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.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
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φ.
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
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
.
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.