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 TextBox
u, 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 Label
u. Jeho použití
nicméně není úplně intuitivní. Pomocí vlastnosti LinkArea
můžeme vybrat na jakou část LinkLabel
u 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 ProgressBar
u 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