Lekce 16 - Ovládací prvky Windows Forms počtvrté
V minulé lekci, Windows Forms - Dialogy, jsme se věnovali aplikačnímu menu a dialogům.
Dnes se podíváme jak se používají ovládací prvky
RichTextBox, MaskedTextBox, TabControl,
LinkLabel, Timer a ProgressBar.
MaskedTextBox

Jde o speciální druh TextBoxu, kde si můžeme jednoduše
stanovit, v jakém formátu do něj uživatel bude zadávat data. To se hodí
např. pro získávání telefonního čísla a dalších podobných údajů. Do
pole poté nelze zadat nic jiného, než povolený formát, což nahrazuje
nutnost vstupy validovat.
Klíčovou vlastností je zde Mask, která vlastně určuje
formát zadávané hodnoty. Pokud si nevyberete z předdefinovaných, je snadné
si vytvořit vlastní. Vyberete <Custom> a do Mask boxu
níže napíšete váš vysněný formát, např.: 00.00.0000 by
bylo pro zadání konkrétního datumu.
Kromě nuly můžeme použít znak L pro písmena. Pokud chceme
povolit jakýkoli znak, používá se ?. A slouží
pro zadávání písmen nebo čísel. 0 je tedy pouze pro čísla a
9 dovoluje čísla + volné místo.
RichTextBox

RichTextBox je takový TextBox na steroidech.
Umožňuje pokročilé formátování textu a další vychytávky. Hlavní je
asi to, že můžete měnit font či barvu pouze zvolené části textu. Jde to
samozřejmě i pro celý text pomocí vlastností ForeColor (barva
textu) a BackColor (barva pozadí). Toto ale umí také obyčejný
TextBox.
Výběr konkrétní části textu provedeme metodou Select(). Ta
bere jako parametry indexy úseku, který chceme formátovat. Tedy počáteční
a konečný. To lze udělat jednoduše čísly, nebo si pomoci
vlastnostmi/metodami. To názorně ukazuje příklad níže.
richTextBox1.Select(richTextBox1.Text.IndexOf("text"), "text".Length); // nebo richTextBox1.Select(0, 10);
Tento kód tedy vybere text "text" a s tím poté můžeme
pracovat. Použít bychom mohli samozřejmě i LastIndexOf(). K
vybrané části textu se poté přistupuje pomocí
Selection[Font, BackColor, atd]. Takže úprava by vypadala nějak
takto:¨
richTextBox1.SelectionFont = new Font("Microsoft sans", 20); richTextBox1.SelectionBackColor = Color.Black; richTextBox1.SelectionColor = Color.Blue;
Z vlastností stojí za zmínku MaxLength, která určuje
maximální počet znaků, které je RichTextBox schopen pojmout.
RightMargin určuje pravé odsazení. Užitečný je také
ZoomFactor pro zvětšování obsahu.
Událostí je zde mnoho. TextChanged se bude hodit a jak název
napovídá, volá se, když se text změnil. LinkClicked se vyvolá
v případě, že bylo kliknuto na URL odkaz v textu.
LinkLabel

Jak se dá vyvodit z názvu (podobně jako u ostatních komponent) jde
jednoduše o Label, který funguje jako odkaz na webovou adresu.
Vlastnosti jsou též podobné obyčejnému Labelu. Jeho použití
nicméně není úplně intuitivní. Pomocí vlastnosti LinkArea
můžeme vybrat na jakou část LinkLabelu půjde kliknout.
Start určuje začáteční index a Length počet
znaků. Základní použití by mohlo vypadat takto:
LinkLabel.Link link = new LinkLabel.Link(); link.LinkData = "http://www.itnetwork.cz"; linkLabel1.Links.Add(link);
Kód výše přidáme do konstruktoru okna nebo do události
Load formuláře. Hlavní událostí LinkLabel je
LinkClicked. Do ní je potřeba napsat následující kód:
Process.Start(e.Link.LinkData as String);
Ten pošle příkaz systému a nastavená URL adresa se otevře v defaultním
prohlížeči. Pro použití je třeba přidat
using System.Diagnostics.
Timer
Jedná se o velmi šikovnou komponentu, která umožňuje provést určité
akce automaticky v daném časovém intervalu. Klíčovou vlastností je zde
Interval, zadává se v milisekundách a udává rozestupy mezi
akcemi. 60 000 ms je 1 minuta. Důležitá je také vlastnost
Enabled, jež určuje, jestli je Timer aktivní po
spuštění programu. Druhou možností je spustit ho metodou
Start(). Metoda Stop() poté Timer
logicky zastaví.
Timer nemá vlastní vlákno, pamatujte tedy na to,
že při vykonávání náročnějšího úkonu "zasekne" celý formulář.
Timer má jedinou událost a tou je Tick, neboli
každé uplynutí nastaveného intervalu.
TabControl

Jedná se o ovládací prvek se záložkami, který do úvodu nejlépe
vysvětlí obrázek. Obsahuje několik záložek, do kterých lze umístit
další prvky (jako např. Panel) a mezi záložkami lze poté
přepínat. Jednotlivé "záložky" se přidávají ve vlastnostech
TabControl pod položkou TabPages, kde je můžeme i
pojmenovat. Fungují jako kontejner, můžeme do nich přidávat další
komponenty. Další vlastnosti slouží výhradně na změnu vzhledu.
TabControl můžete také použít třeba jako průvodce
instalací. Tlačítka na přepínání záložek sice nelze deaktivovat, ale
můžete je schovat mimo okno. To osvětlí screenshot.

Na další záložku se poté přepíná v kódu např. pomocí jejího názvu takto:
tabControl1.SelectTab("[název záložky]");
Či pomocí jejího indexu:
tabControl1.SelectedIndex = [index];
ProgressBar

Hodí se např. pro informování uživatele o tom, jak pokračuje určitý
proces v aplikaci. Vlastnost Maximum určuje, kolik "políček"
daný progressbar má. Důležitá je také vlastnost Style, která
určuje, v jakém stylu bude progress bar vykreslen a konečně
Step určuje, o kolik se zaplní, pokud zavoláte metodu
PerformStep(). Na výběr jsou tři možnosti - Blocks
(nabývá skokově), Continuous (nabývá plynule) a
Marquee. Poslední jmenovaný se liší. Pokud je nastaven,
ProgressBar nenabývá, ale plynule "jezdí" bez zastavení. Dá se
nastavit také rychlost, najdete ji pod vlastností
MarqueeAnimationSpeed.
Marquee ProgressBar nelze jednoduše zapnout a je
třeba použít menší "trik". Pokud chcete, aby se pohyboval až po
aktivování, musíte jej předtím nastavit např. na Continuous a
poté někde v kódu zavolat:
progressBar1.Style = ProgressBarStyle.Marquee;
Analogickým způsobem jej i zastavíte.
progressBar1.Style = ProgressBarStyle.Continuous;
Reset ProgressBaru provedeme nastavením jeho hodnoty
(Value) na 0. Můžeme ho také schovat pomocí metody
Hide() a poté pomocí Show() opět zobrazit.
V příští lekci, Tvoříme vlastní Syntax Highlighter pomocí RichTextBox v C#, si vytvoříme vlastní editor zvýrazňující
kód, jako to dělá Visual Studio 

