PHP, Praha? Mám pro Tebe tu práci cos chtěl a 15.000,- kč bonus. Napiš mi na [email protected] nebo klikni sem. Lucka

15. díl - Windows Forms - Dialogy

C# .NET Formuláře Windows Forms Windows Forms - Dialogy

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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.

Menu strip v C# .NET

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.

Toolstrip v C# .NET

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;
}
C# .NET FileBrowserDialog

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.

C# .NET OpenFileDialog

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);
}
C# .NET SaveFileDialog

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;
}
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 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 = “Tohle je vybraný font“;
}
C# .NET FontDialog

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:

C# .NET MessageBox

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 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.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.


 

 

Článek pro vás napsal Paradise
Avatar
Jak se ti líbí článek?
10 hlasů
Aktivity (4)

 

 

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

Avatar
Michal Žůrek (misaz):3.9.2013 19:07

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:3.9.2013 19:15

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):3.9.2013 19:29

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:3.9.2013 21:11

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:3.9.2013 22:49

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):4.9.2013 13:49

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
Jirka
Člen
Avatar
 
Odpovědět 4.9.2013 18:55
Avatar
Kotyza Lukáš:31.5.2016 20:25

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

 
Odpovědět 31.5.2016 20:25
Avatar
Odpovídá na Kotyza Lukáš
Michal Štěpánek:1.6.2016 7:37

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

Editováno 1.6.2016 7:38
Odpovědět 1.6.2016 7:37
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kotyza Lukáš
David Čápka:28.4.2017 13:04

Díky, opraveno :)

Odpovědět 28.4.2017 13:04
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 19. Zobrazit vše