41.1 Událost validate
41.2 Výpustka
41.3 TabIndex
41.4 Hranaté závorky a názvy objektů
41.5 Rychlokomentování
41.6 Přednosti a překrývání
41.7 Funkce Static
41.8 Vlastnost Container
41.9 Domácí úkol
41.10 V další lekci
Událost validate – co to je, k čemu to použít a kdy nastane? Tak zaprvé se podíváme na to, k čemu se používá. Používá se tedy ke kontrole zadaných dat, nejčastěji se používají u textboxů. Aby tato událost nastala, musí být nastavena vlastnost CausesValidation. Tato událost nastává ještě předtím, než nastane událost LostFokus. To znamená, že uvedeme tento kód:
Private Sub Text1_Validate(Cancel As Boolean)
Cancel = True
End Sub
K události LostFokus vůbec nedojde a tudíž se vlastně nestane nic jiného. Kód pak můžet upravit třeba takto:
Private Sub Text1_Validate(Cancel As Boolean)
If cokoliv = cemukoliv Then
Text1.Text = "nesprávný údaj"
Cancel = True
End If
End Sub
Tím bychom měli problematiku události Validate za sebou.
41.2 VýpustkaOpět se podíváme na to, kdy se používá, kde se používá a co znamená. Výpustka jsou ty tři tečky v menu, pokud víte, co myslím. Pokud jsou za nějakým slovem v nabídce tři tečky, čili výpustka upozorňuje to uživatele, že po stisknutí tohoto tlačítka se mu objeví nejspíš nějaký dialog s nastavením. Tak se liší třeba tlačítko Tisk a tlačítko Tisk…. Pokud tedy stisknete tlačítko Tisk, vytiskne se vám dokument přímo, podle implicitního nastavení. Stiskem tlačítka Tisk… se vám zobrazí dialog, kde si můžete vybrat jak tiskárnu, na které budete tisknout, tak i ostatní nastavení tisku.
41.3 TabIndexTabIndex je pořadí, po kterém se posouvá fokus při stisku tlačítka TAB. Prvek, který je jako první vložený na formulář a může získat fokus, má TabIndex nastaven na 0, druhý na 1 atd. Pokud některý zněmíte, ostatní se automaticky posunou. Jak, to si zkuste sami. TabIndexu můžete využít například když jste vložili objekty na formulář v jiném pořadí, než jste chtěli. Nebo pokud objekty na formuláři přeskupujete. K tomu bych dodal jednu věc – dříve než formulář začnete tvořit naostro, je vhodné si ho navrhnout, třeba na papír anebo v nějakém projektu jen tak a už tam si určit tabulovací pořadí. Pokud si děláte nějakou aplikaci jen pro osobní použití, tak vám to bude nejspíš jedno, ale pokud děláte aplikace, které chcete vypustit mezi lidi, tak se tím trochu řiďte, jsou totiž lidé, kteří ovládání na klávesnici preferují.
41.4 Hranaté závorky a názvy objektůPokud máte v úmyslu pojmenovat nějaký objekt podle klíčového slova, je to možné, ale nedoporučuji to. V některých případech se to ale může hodit. Pro to, abyste s takovým objektem mohli pracovat v kódu, je jeho jméno nutné uvést do hranatých závorek.
Private Sub Print_Click()
[Print].Caption = " ahoj "
[EndIf].Caption = "nevim"
[Or].Default = True
End Sub
Ale jak říkám, tomuto se raději vyhýbejte.
41.5 Rychlokomentování.Pokud potřebujete část kódu označit jako komentář (třeba při testování), je dobré použít tlačítko Comment Block a Uncomment Block, když chcete blok okomentovat. To je tak vše, co jsem vám v této minikapitolce rychlokomentování chtěl sdělit.
41.6 Přednosti a překrývání.Tohle je také zajímavá kapitola, které se třeba u jazyků C++ věnuje mnohem více času než tady. Ale něco málo si řekneme.
Proměnné se mohou překrývat, znamená to, že mám veřejnou lokální proměnné. Veřejná proměnná platí všude, pokud ji některá proměnná, která je lokálnější, nepřekryje. Pokud tedy bude mít proceduru, ve které bude deklarována proměnná se stejným jménem, bude se v této proceduře pracovat s proměnnou, která je lokální, ale jakmile proceduru opustíme, tak pracuje zase s veřejnou proměnnou. Zbytek vyjádřím v kódu:
Private Sub Command1_Click()
Dim xy As Long
xy = xy + 1
Print xy
End Sub
Private Sub Command2_Click()
Static xy As Long
xy = xy + 1
Print xy
End Sub
Private Sub Command3_Click()
Print xy
End Sub
Private Sub Form_Load()
xy = 7
End Sub
41.7 Funkce Static
Tak tahle věc se vám může hodit. Pokud totiž vytvoříte nějakou funkci, která bude statická, stanou se statické i všechny proměnné, které obsahuje. Viz kód.
Static Function GetSerial()
Dim a As Long
Dim b As Long
Dim c As Long
Dim d As Long
a = a + 1
If a = 20 Then b = b + 1: a = 0
'atd
GetSerial = a & "_" & b & "_" & c & "_" & d
End Function
Nemusíte tedy deklarovat proměnné jako statické. I když myslím, že tolik práce to zase není, ale pro vás může být informační charakter to, že je celá funkce statická. Slovo static může být i před procedurou.
41.8 Vlastnost ContainerPoslední, na co se v tomto díle podíváme, je vlastnost Container. Je to jedna z vlastností, kterou můžeme upravovat pouze za běhu aplikace. To, co jsem teď napsal, není tak stoprocentní. Ano, my tuto vlastnost nemůžeme nastavit v okně Properties. Ale můžeme toho dosáhnout přemístěním ovládacích prvků do, nebo mimo kontejnerový prvek. To ale nejde běžnou technikou, tedy přetáhnutím, ale musíme využít Ctrl+X a Ctrl+V anebo nabídku vyjmout a vložit. Vlastnost můžeme upravovat například takto:
Private Sub Command1_Click()
Set Command1.Container = Picture1
Command1.Left = 1
Command1.Top = 1
End Sub
Private Sub Command3_Click()
Set Command1.Container = Form1
Command1.Left = 1
Command1.Top = 1
End Sub
Je nezbytné používat klíčové slovo Set. Proč? Na to vám odpovím v několika kapitolách, které budou zaměřené na OOP (Objektově orientované programování), tj. tvorba tříd, objektů, zapouzdření dat atd.
41.9 Domácí úkolVytvořte program, který využívá při zadávání dat události Validate a užívá static funkcí.
41.10 V další lekciPokud bude nálada, tak snad SQL ve VB