Seriál - 4. díl
Práce s formulářem a základními ovládacími prvky

8. Formulář
    8.1. Způsoby zobrazení
    8.2. Vzhled formuláře
9. Základní ovládací prvky
    9.1. Label
    9.2. TextBox
    9.3. CommandButton


8. Formulář

Bavíme-li se o formuláři, musíme rozlišovat 2 typy. Tzv. normální formulář (form) a MDI formulář (MDI form). V této kapitole se budeme zabývat pouze normálním formulářem.

8.1. Způsoby zobrazení

Aby mohl být formulář zobrazen, musí být nejdříve nahrán do paměti. Nahrát formulář (i jiné objekty) neboli vytvořit instanci objektu Form lze pomocí funkce Load.

Load Form1

Funkce Load způsobí nahrátí formuláře do paměti (je vyvolána událost Form_Load). V této chvíli již s formulářem můžeme normálně pracovat, nepůjde však vidět. Zobrazit lze pomocí metody Show.

Show [Modal], [OwnerForm]

Oba parametry Modal i OwnerForm jsou nepovinné. Modal určuje způsob zobrazení formuláře. Pokud zadáte 1, bude formulář tzv. modální, tzn. program nebude pokračovat dále, dokud nebude formulář schován. Druhý parametr OwnerForm určuje formulář, který je vlastníkem formuláře. To je výhodné např. tehdy, chcete-li formulář zobrazit uprostřed jiného. Nastavíte jeho vlastnost StartUpPosition na vbStartUpOwner neboli 1 a jako vlastníka nastavíte formulář, v jehož středu má být zobrazen. VB udělá vše za vás.

Příklad:

Vytvořte nový projekt a v něm dva formuláře, Form1 a Form2. Vlastnost StartUpPosition formuláře Form2 nastavte v okně Properties na CenterOwner (v kódu nelze nastavovat). Do události Form_Click formuláře Form1 vložte tento řádek:

Load Form2
Form2.Show , Form1

Parametr Modal není zadán, ale musí být "jako" zapsán, protože zadáváme druhý parametr. Proto je tam čárka. Také jde zapsat takto:

Form2.Show OwnerForm:=Form1

Formulář Form1 bude zobrazen a "vystředěn" vzhledem k Form1. Zkuste místo výše uvedeného řádku tento

Form2.Show vbModal, Form1

spusťte program a klikněte na Form1. Zobrazí se Form2. Teď se pokuste kliknout někde na Form1. Dokud bude Form2 vidět, nepůjde to.

Aby vám VB ulehčil práci, umožňuje pracovat s formulářem i bez použití funkce Load. Pokud chcete formulář zobrazit, stačí použít metodu Show. Automaticky je nahrán do paměti a zobrazen. Pokud ho nechcete zobrazit, ale přesto s ním pracovat, je situace stejná. nemusíte použít Load.

Form1.Caption = "První formulář"

Formulář je automaticky nahrán do paměti a titulek je nastaven na "První formulář".

Jak a kde bude formulář vytvořen určují dvě vlastnosti, WindowState a StartUpPosition. První určuje, zda bude formulář při vytvoření minimalizovaný, maximalizovaný nebo normální. Druhá určuje pozici na obrazovce. Může být bez určení (manual), vycentrován vzhledem k jinému formuláři, vycentrován vzhledem k obrazovce, nebo v levém horním rohu obrazovky.

Po skončení práce je třeba formulář z paměti uvolnit. To lze pomocí funkce Unload.

Unload Form1

Formulář Form1 bude schován a paměť uvolněna pro jiné použití (při použití této funkce je vyvolána událost Form_UnLoad). Pokud takto paměť neuvolníte, provede to VB za vás při ukončení programu nebo při skončení platnosti proměnné, která představuje formulář. Není však dobré na to spoléhat. Nahrajete-li při běhu programu několik formulářů a necháváte je zbytečně v paměti, zabíráte systémové prostředky počítače, kterých není nikdy dost.

Formulář lze také pouze schovat. To provádí metoda Hide.

Form1.Hide 'schova formular, zustane vsak v pameti

To je výhodné v případě, že používáte formulář na vstup nějakých hodnot. Po té, co uživatel stiskne OK, nejdříve formulář shováte Hide, přečtete hodnoty z prvků, které se na něm nachází a až potom jej uvolníte z paměti Unload. Např.:

Dim jmeno As string, prijmeni As string

frmOsUdaje.Show vbModal 'protoze je modalni, kod pokracuje dal az po jeho schovani
'schovani je provedeno v kodu frmOsUdaje pod tlacitkem OK, frmOsUdaje.Hide

jmeno = frmOsUdaje.txtJmeno
prijmeni = frmOsUdaje.txtPrijmeni
Unload frmOsUdaje

Zpět na obsah


8.2. Vzhled formuláře

Vzhled formuláře určuje mnoho vlastností. U každé uvedeme její možnosti tak, jak jsou nabízeny v okně Properties. Pokud chcete vlastnost nastavit v kódu, použijte číselné hodnoty nebo konstanty, které najdete v nápovědě k vlastnosti.

Vlastnost Význam Hodnoty
BorderStyle Určuje styl formuláře (okraje, tlačítka). None - pouze plocha bez tlačítek, okrajů a titulkové lišty.
Fixed Single - formulář, jehož velikost nelze v programu měnit. Může obsahovat minimalizační a maximalizační tlačítko.
Sizable - klasický formulář.
Fixed Dialog - formulář, jehož velikost nelze v programu měnit. Nemůže obsahovat minimalizační a maximalizační tlačítko.
Fixed Tool Window - formulář, jehož velikost nelze měnit. Titulková lišta i tlačítko X jsou menší.
Sizable Tool Window - stejně jako Fixed Tool Window, lze však měnit jeho velikost.
Caption Titulek formuláře (text zobrazený v titulkové liště). Tento text je také zobrazen v hlavním panelu. Jakýkoliv text.
ControlBox Určuje, zda budou v titulkové liště zobrazena tlačítka a vlevo ikona se systémovou nabídkou (menu). True, False
Icon Ikona, která bude zobrazena v titulkové liště (standardně ikona z VB). Soubor ICO.
Height, Width, Left, Top Výška, délka, levý horní roh zleva a zhora. Hodnoty od 0 až do .... ve speciálních jednotkách VB, nazývaných Twipy (Twips).
MaxButton Určuje, zda bude zobrazeno maximalizační tlačítko. True, False
MinButton Určuje, zda bude zobrazeno minimalizační tlačítko. True, False
Picture Obrázek, který bude na pozadí formuláře. Bitmapy, Gif, Jpeg, Metafile (WMF, EMF), ikony a kurzory.
ShowInTaskBar Určuje, zda se formulář objeví v hlavním panelu. True, False
Visible Určuje, jestli bude formulář vidět nebo ne. True, False

Zpět na obsah


9. Základní ovládací prvky

V této kapitole bychom Vás chtěli seznámit s třemi, podle nás, nejběžnějšími prvky, které se používají ve Windows. Jde o Label (popisek), TextBox (textové pole) a CommandButton (tlačítko). Se všemi třemi se denně setkáváme snad ve všech programech, aniž bychom si to uvědomovali.

9.1. Label

Slouží k prostému zobrazení textu, který ovšem není přímo měnitelný uživatelem. Hodí se především jako popisek před textové pole nebo pro účely, kde má být text uživatelem neměnný. Tam kde to je možné, používejte jej přednostně před TextBoxem, který je poněkud náročnějším prvkem co se týče systémových zdrojů. Potřebujete-li mít vzhled TextBoxu, dosáhnete toho jednoduchou úpravou vlastností (nastavíte BorderStyle na FixedSingle a BackColor na systémovou barvu Window BackGround).

Pokud používáte Label jen při návrhu, tj. v kódu s ním nepracujete, jsou pro Vás důležité pouze 2 vlastnosti, které se týkají vzhledu. Např. Caption, což je text, který se zobrazí, Font, která určuje typ použitého fontu, BackColor pro barvu pozadí apod. (nemá smysl všechny vyjmenovávat, lepší bude si vše vyzkoušet).

Pokud měníte text Labelu v kódu, např. pro zobrazování počtu zpracovaných záznamů, jsou důležité další dvě vlastnosti. AutoSize, která mění automaticky velikost prvku v závislosti na délce textu a WordWrap, která určuje, zda se bude nebo nebude text zalamovat na více řádků.

Zpět na obsah


9.2. TextBox

Název tohoto prvku by se dal do češtiny přeložit jako textové pole. Slouží k tomu, aby mohl uživatel interaktivně měnit nebo zadávat hodnoty. Rozdíl od Label je jasně vidět, TextBox nejen zobrazuje, ale je možné jej i měnit uživatelem. Tam kde potřebujete získat libovolné údaje, ať už je užíváte v kódu nebo je třeba ukládáte do databáze (pro to má VB přímou podporu, o té si však řekneme v některém pozdějším díle) proto používáme nejčastěji TextBox.

Vložíme-li na formulář TextBox pro vstup dat od uživatele, chceme mít možnost tato data nějak přečíst. To umožňuje vlastnost Text. V ní je obsažen veškerý text v TextBoxu (umožňuje text nejen číst, ale i nastavovat). Př.

If Text1.Text="" Then
  MsgBox "Zadejte spravny text"
Else
  MsgBox Text1.Text
End If

Chceme-li zabránit aby uživatel po zadání špatné hodnoty neopustil TextBox, můžeme k tomu využít události Validate. Tato nastane před ztrátou ohniska. Má jeden parametr, Cancel typu Boolean. Jeho nastavením na True můžete ztrátu ohniska zakázat . Uživatel tak stále zůstane na místě a vy ho můžete přinutit hodnotu opravit.

Private Sub Text1_Validate(Cancel As Boolean)
  If Not IsDate(Text1.Text) Then
    MsgBox "Chybně zadané datum", vbCritical, "Chyba"
    Cancel = True
  End If
End Sub

Standardně lze v TextBoxu psát text vždy jen na jeden řádek. To můžeme změnit nastavením vlastnosti MultiLine na True. Délku uživatelem vkládaného textu omezíte pomocí vlastnosti MaxLength, kterou nastavíte na číslo odpovídající maximálnímu počtu znaků.

Zpět na obsah


9.3. CommandButton

CoomandButton, neboli tlačítko, je používán pouze k jedné věci a tou je vždy potvrzení nějaké akce. Uživatel třeba vyplní formulář a musí stiknout tlačítko, jinak se nedovíme, že skončil. Proto je u něj nejdůležitější událost Click. Nastává, jak je patrno už z jejího názvu, jakmile uživatel na tlačítko klikne myší. Např.:

'Na stisk tlacitka Command1 se ukaze formular Form2
Private Sub Command1_Click()
  Form2.Show
End Sub

Důležitými vlastnostmi u tlačítek jsou Cancel a Default. Nastavíme-li Cancel = True, a uživatel stikne klávesu Esc (samozřejmě pouze pokud je aktivní formulář, na kterém se tlačítko nachází), je proveden kód v události Click. Default je hodně podobné, ale reaguje na klávesu Enter. Stikne-li tedy uživatel Enter, spustí se kód v události Click. Na formuláři je možno nastavit Cancel = True pouze pro jedno tlačítko (stejně tak i Default.

Protože vše je nejlepší vidět na vlastní oči a také vyzkoušet, připravili jsme pro Vás příklad, který ukazuje většinu z toho, co jsme si v těchto dvou kapitolách vysvětlili. Jak funguje, naleznete v něm.

Zpět na obsah