15. díl - Windows Forms - Dialogy

C# .NET Windows Forms Windows Forms - Dialogy

V článku se podíváme na tvorbu menu v okenní aplikaci a otevírání souborů/složek pomocí dialogu. A také na to, jak se používá MessageBox. To vše v C# .NET.

MenuStrip

Tato komponenta zajišťuje menu v horní části aplikace. Používá se velice jednoduše. Po jejím 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ů. Třeba 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

Tuto komponentu najdete popsanou 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 Dokumenty jako RootFolder, je možné vybrat pouze podsložky dokumentů. ShowNewFolderButton pak určuje, zda je možné tvořit nové složky. V kódu se pak dialog otevírá metodou ShowDialog(), vybranou složku pak získáte pomocí vlastnosti SelectedPath.

Po vyvoláním dialogu je nutné zeptat se, 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;
}
C# .NET FileBrowserDialog

OpenFileDialog

Otevírání složek jsme již probrali, teď jsou na čase soubory. Postup je skoro stejný. Zase komponentu přidáte na formulář. Z vlastností do začátku stojí za zmínku InitialDirectory, což je prakticky to samé jako vlastnost RootFolder. Multiselect pak určuje, jestli je možné, vybrat více souborů. Dialog se opět v kódu otvírá metodou ShowDialog() a vybraný soubor získáte pomocí vlastnosti FileName.

C# .NET OpenFileDialog

SaveFileDialog

Tento dialog slouží k ukládání souborů. Z vlastností bych vypíchl FileName, což je jméno výsledného souboru, dále InitialDirectory, tedy adresář, kde se dialog po otevření bude nacházet. DefaultExt pak určuje příponu souboru, OverwritePrompt se zase ptá, jestli se má soubor přepsat, pokud existuje. Title pak nastavuje název dialogu. Otevírá se zase nepřekvapivě metodou ShowDialog().

Pokud pak chcete provést další akce, dělá se to pomocí Eventu. 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);
}
C# .NET SaveFileDialog

ColorDialog

Jak lze vyčíst z názvu, tato kontrolka má co dělat s barvami. Jedná se o dialog, který umožňuje uživateli vybrat barvu. Z vlastností je důležitá hlavně AllowFullOpen, která určuje, jestli je možné „vytvořit“ vlastní barvu. Color pak udává, jaká barva bude defaultní po otevření dialogu. Opět se otevírá metodou ShowDialog().

Barvu pak získáte vlastností Color. Kód níže vybarví pozadí okna zvolenou barvou.

if (colorDialog1.ShowDialog() == DialogResult.OK)
{
   this.BackColor = colorDialog1.Color;
}
C# .NET ColorDialog

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 pak dovoluje vybrat podtržení nebo přeškrtnutí a ShowColor pak výběr barvy fontu.

Font získáte vlastností Font, a pokud vybíráte barvu, musíte ji získat zvlášť pomocí vlastnosti Color. Tady je ještě ukázka:

if (fontDialog1.ShowDialog() == DialogResult.OK);
{
   label1.Font = fontDialog1.Font;
   label1.ForeColor = fontDialog1.Color;
   label1.Text = “Tohle je vybraný font“;
}
C# .NET FontDialog

MessageBox

Toto sice není komponenta, ale přesto si své místo zde zaslouží. Je to takový ten dialog, který vyskakuje, pokud provádíte nějakou nestandardní činnost, třeba vysypání koše.

Nejlépe to asi pochopíte z příkladu. Tento kód:

MessageBox.Show(“Toto je hlavní text okna se zprávou“, “Název okna“, MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

Vytvoří toto:

C# .NET MessageBox

První text je tedy hlavní sdělení, druhý název okna a MessageBoxButtons určuje, jaká zde budou tlačítka, na výběr je samotné OK, OK + Cancel, Ano a Ne apod. MessageBoxIcon se pak 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 MessageBoxu, ž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.(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.

Zde je zase ukázka:

DialogResult dr = MessageBox.Show(“Opravdu smazat?“, “Potvrzení“, MessageBoxButtons.OKCancel, MessageBoxIcon.Question;
if (dr == DialogResult.OK)
{
   ...
}

 

  Aktivity (1)

Článek pro vás napsal Paradise
Avatar

Jak se ti líbí článek?
Celkem (8 hlasů) :
4.8754.8754.8754.8754.875


 


Miniatura
Předchozí článek
Další kontrolky Windows Forms
Miniatura
Všechny články v sekci
Okenní aplikace v C#
Miniatura
Následující článek
Kontrolky Windows Forms počtvrté

 

 

Komentáře
Zobrazit starší komentáře (8)

Avatar
Jirka
Člen
Avatar
Jirka:

Ahoj, vysvětlete mi někdo prosím, proč je WPF aplikace tak chudá na komponenty. Přijde mi to jako velká škoda. :(

 
Odpovědět 3.9.2013 19:03
Avatar
Odpovídá na Jirka
Michal Žůrek (misaz):

jaké komponenty máš na mysli? Timer? Jednoduše si ho deklaruj v kódu.

Odpovědět 3.9.2013 19:07
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jirka
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
Jirka:

Třeba NumericUpDown, vím že si ho můžu udělat, ale podle mě je to krok zpět.
Nebo jak udělat ve WPF aplikaci dialog s fonty nebo s barvou ? Vím jak to udělat u OpenFileDialog a SaveFileDialog, ale u těch uvedených nevím.

 
Odpovědět 3.9.2013 19:15
Avatar
Odpovídá na Jirka
Michal Žůrek (misaz):

http://wpftoolkit.codeplex.com/ tam je nějaký numericupdown. Dialogy přeci můžeš pouít stejné. OpenFileDialog, SaveFileDialog i ColorDialog sídlý v knihovně System.Window­s.Forms.dll, abys je mohl použít musíš si je přidat do referencí.

Odpovědět 3.9.2013 19:29
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jirka
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
Jirka:

Aha, to jsem nevěděl :) , ale u ukládacího nebo otevíracího dialogu není třeba přidávat referenci, stačí jen zavést namespaces, using Microsoft.Win32; . Nejdou ty ostatní dialogy taky nějak podobně ? Mám pocit, že řešení přes referenci je jako míchání Form a WPF aplikace.

 
Odpovědět 3.9.2013 21:11
Avatar
Jirka
Člen
Avatar
Odpovídá na Jirka
Jirka:

Tak jsem se zeptal strýčka googla a opravdu to jinak nejde. Jsou ale ke stažení ty dialogy v WPF verzi. To by měl Microsoft doplnit.

 
Odpovědět 3.9.2013 22:49
Avatar
Odpovídá na Jirka
Michal Žůrek (misaz):

jistě že je to míchání, ale přijde mi to lepší varianta než použít dialog třetí strany.

Odpovědět 4.9.2013 13:49
Nesnáším {}, proto se jim vyhýbám.
Avatar
lukas.kotyza
Člen
Avatar
lukas.kotyza:

promiňte ale nechybí vám tam konec závorky v kódu u messageboxu?

 
Odpovědět 31. května 20:25
Avatar
Odpovídá na lukas.kotyza
Michal Štěpánek:

Nechybí
Vlastně u toho posledního příkladu bych řekl, že chybí...

Editováno 1. června 7:38
Odpovědět 1. června 7:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 18. Zobrazit vše