Lekce 15 - Windows Forms - Dialogy
V minulé lekci, Další ovládací prvky Windows Forms, jsme se věnovali pokročilým ovládacím prvkům WinForms.
V dnešním tutoriálu se podíváme na tvorbu menu v okenní aplikaci a
otevírání souborů/složek pomocí dialogů. A také na to, jak se používá
MessageBox
. To vše v C# .NET.
MenuStrip
Tento ovládací prvek zajišťuje menu v horní části aplikace. Používá se velice jednoduše. Po jeho přidání do projektu stačí jen vybrat názvy a počet položek, jak lze vidět na obrázku. Ve vlastnostech není třeba nic nastavovat. Dále stačí na jednotlivé volby 2x kliknout a jste v kódu, kde si nastavíte, jaká akce se po kliknutí myší na danou položku stane.
ToolStrip
ToolStrip
je velmi podobný předchozímu
MenuStrip
. Sám o sobě ale nic nedělá a slouží k přidání
několika dalších prvků. Např. Button
, Label
,
DropDownButton
(což je verze na MenuStrip
),
Separator
(slouží k oddělení) a několik dalších. Jejich
nastavení je opět velmi jednoduché, takže u tlačítek opět stačí 2x
kliknout myší a můžete psát kód.
ContextMenuStrip
Tento ovládací prvek najdete popsaný v článku o tray ikonce, takže ji zde uvádím jen pro pořádek. Jedná se vlastně o menu, zobrazující se po kliknutí na určitou komponentu.
FolderBrowserDialog
Pokud chcete pracovat v programu se složkami, je tato komponenta prakticky
nutností. Umožňuje intuitivní a jednoduchý výběr složky. Z vlastností
je důležitá hlavně RootFolder
, která určuje výchozí složku
při otevření dialogu. Navíc se nedostanete "zpět", pokud tedy nastavíte
např. složku Dokumenty
jako RootFolder
, je možné
vybrat pouze podsložky dokumentů. ShowNewFolderButton
poté
určuje, zda je možné tvořit nové složky.
V kódu se dialog otevírá metodou ShowDialog()
, vybranou
složku poté získáme pomocí vlastnosti SelectedPath
.
Po vyvolání dialogu je nutné se zeptat, zda byl ukončen potvrzením,
jinak bychom danou akci provedli i v případě, že uživatel dialog zavře
křížkem nebo tlačítkem Storno. Metoda ShowDialog()
nám vždy
vrátí hodnotu podle toho, jakým tlačítkem byl ukončen.
if (folderBrowseDialog1.ShowDialog() == DialogResult.OK) { string text = folderBrowserDialog1.SelectedPath; }
OpenFileDialog
Otevírání složek jsme již probrali, nyní jsou na čase soubory. Postup
je téměř stejný. Zas komponentu přidáme na formulář. Z vlastností do
začátku stojí za zmínku InitialDirectory
, což je prakticky to
samé jako vlastnost RootFolder
. Multiselect
poté
určuje, jestli je možné vybrat více souborů. Dialog se opět v kódu
otevírá metodou ShowDialog()
a vybraný soubor získáme pomocí
vlastnosti FileName
.
SaveFileDialog
Tento dialog slouží k ukládání souborů. Z vlastností stojí za
zmínění FileName
, což je jméno výsledného souboru, dále
InitialDirectory
, tedy adresář, kde se dialog po otevření bude
nacházet. DefaultExt
poté určuje příponu souboru.
OverwritePrompt
se zas ptá, jestli se má soubor přepsat, pokud
existuje. Title
pak nastavuje název dialogu. Otevírá se zas
metodou ShowDialog()
.
Pokud chcete provést další akce, použijete události. Konkrétně event
FileOk
, kde si nastavíte akci, jež se provede za předpokladu,
že je vše v pořádku. Název souboru získáte vlastností
FileName
.
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) { File.Create(saveFileDialog1.FileName); }
ColorDialog
Jak lze vyčíst z názvu, tento ovládací prvek má co dělat s barvami.
Jedná se o dialog, který umožňuje uživateli vybrat barvu. Z vlastností je
důležitá zejména AllowFullOpen
, která určuje, jestli je
možné „vytvořit“ vlastní barvu. Color
poté udává, jaká
barva bude defaultní po otevření dialogu. Dialog se opět otevírá metodou
ShowDialog()
.
Barvu poté získáme vlastností Color
. Kód níže vybarví
pozadí okna zvolenou barvou.
if (colorDialog1.ShowDialog() == DialogResult.OK) { this.BackColor = colorDialog1.Color; }
FontDialog
Tento dialog je velmi podobný tomu na výběr barev. Akorát zde vybíráte
font písma, což lze odvodit z jeho názvu. Jen pro pořádek připomenu, že
se otevírá metodou ShowDialog()
. Z jeho vlastností jsou
důležité MinSize
a MaxSize
, kde si můžete
nastavit, jaká velikost půjde vybrat (0
je pro neomezenou).
ShowEffect
poté dovoluje vybrat podtržení nebo přeškrtnutí a
ShowColor
výběr barvy fontu.
Font získáme vlastností Font
, a pokud vybíráme barvu,
musíme ji získat zvlášť pomocí vlastnosti Color
. Zde je
ještě ukázka:
if (fontDialog1.ShowDialog() == DialogResult.OK) { label1.Font = fontDialog1.Font; label1.ForeColor = fontDialog1.Color; label1.Text = "Toto je vybraný font"; }
MessageBox
Sice se nejedná o ovládací prvek, ale přesto si zde své místo zaslouží. Je to ten pop-up dialog, který vyskakuje např. pokud provádíte nějakou nestandardní činnost jako je vysypání koše.
Následující kód:
MessageBox.Show("Toto je hlavní text okna se zprávou", "Název okna", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
Má za následek vyvolání dialogu niže:
První text je tedy zpráva, druhý název okna a
MessageBoxButtons
určuje, jaká zde budou tlačítka, na výběr
je samotné OK, OK a Cancel, Ano a Ne apod. MessageBoxIcon
se
stará o ikonku vlevo vedle textu. Opět jich je na výběr několik. Některé
parametry lze vynechat.
Určitě by bylo dobré umět reagovat na tlačítka v
MessageBox
u, že? To si hned ukážeme.
Nejde o žádnou vědu. Celý kód s MessageBoxem
obalíme do
if
a přidáme == DialogResult.OK
.(kde OK
je požadované tlačítko). Tím pádem se daná akce v podmínce provede pouze
při výběru konkrétního tlačítka.
Níže je ukázka:
DialogResult dr = MessageBox.Show("Opravdu smazat?", "Potvrzení", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (dr == DialogResult.OK) { // ... }
V příští lekci, Ovládací prvky Windows Forms počtvrté, si představíme např. pokročilé TextBoxy, časovač nebo progressbar.