This article is currently in the process of being translated into Slovak (~99% done).
The MessageBox
WPF ponúka niekoľko dialógových okien, ktoré môže vaša aplikácia využiť, ale najjednoduchším je určite MessageBoc. Jeho jediným účelom je zobraziť užívateľovy správu a potom ponúknuť jeden alebo niekoľko spôsobov ako na danú správu odpovedať.
MessageBox sa použije zavolaním statickej metódy Show(), ktorá môže obsahovať celý rad rôzdnych nastavení, aby mohla vyzerať a aj sa správať ako potrebujete. My si prejdeme všetky formy v tomto článku, pričom každá variácia je reprezentovaná riadkom MessageBox.Show() a snímkou výsledku. Na konci článku nájdete kompletný príklad, ktorý vám umožní otestovať všetky variácie.
MessageBox v najjednoduchšej podobe zoberie iba jeden parameter, ktorým je správa na zobrazenie:
MessageBox.Show("Hello, world!");
MessageBox s titulkom
Vyššie uvedený príklad by mohol byť trochu dosť holý- titulok v okne zobrazujúci sprvávu by pomohol. Našťastie druhým voliteľným parameter nám umožňuje zadať názov:
MessageBox.Show("Hello, world!", "My App");
MessageBox s extra tlačítkami
V defaultnom nastavení má MessageBox len jedno tlačidlo Ok, ale to môže byť zmenené, ak chceme užívateľovy položiť otázku a nie len ukázať časť informácie. Všimite si ako používam viac riadkov v správe, vďaka používanie znaku zalomenia riadku (\n):
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
Vy kontrolujete, ktoré tlačidlá sa májú zobraziť pomocou nastavenia hodnoty z výčtu MessageBoxButton - v tomto prípade sú zahrnuté tlačídlá, Áno, Nie, Zrušiť. Môžu byť použité nasledujúce hodnoty, ktoré by mali byť samovysvetľujúce:
- OK
- OKCancel
- YesNoCancel
- YesNo
Teraz z viacerými možnosťami potrebujete spôsoby, ako vidieť, čo si užívateľ vybral, našťastie metóda MessageBox.Shov() vždy vracia hodnotu do MessageBoxResult, ktorá môžete použiť. Tu je príklad:
MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
switch(result)
{
case MessageBoxResult.Yes:
MessageBox.Show("Hello to you too!", "My App");
break;
case MessageBoxResult.No:
MessageBox.Show("Oh well, too bad!", "My App");
break;
case MessageBoxResult.Cancel:
MessageBox.Show("Nevermind then...", "My App");
break;
}
Kontrolou výslednej hodnoty medódy MessageBox.Shov() môžete teraz reágovať na výber užívateľa, ako je vidieť v kóde tohto príkladu, aj na screenshotoch.
MessageBox s ikonou
MessageBox má možnosť zobraziť preddefinovanú ikonu naľavo do textovej správy, pomocou požitia štvrtého parametra:
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
Pomocou výčtu MessageBoxImage si môžete vybrať medzi ikonami pre rôzne situácie. Tu je kompletný zoznam:
- Asterisk (hviezdička)
- Error (chyba)
- Exclamation (zvolanie)
- Hand (ručné)
- Information (Informácia)
- None (nič/defaultne nastavené)
- Question (otázka)
- Stop (zastaviť)
- Warning (upozornenie)
Názvy by mali hovoriť veľa o tom ako vyzrerajú, ale môžete voľne experimentovať s rôzdnymi hodonotami, alebo sa pozrieť na článok od MSDN, kde je každá hodnota vysvetlená a aj ilustrovaná: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx
MessageBox s predvolenou možnosťou
MessageBox môže vybrať predvolené tlačidlo, kroeé sa potom vyvolá v prípade, že používateľ strláčí kláves Enter. Na príklad, ak zobrazujete MessageBox s tlačidlom "Áno" a "Nie", prevolenou odpoveďou bude "Áno". Avšak toto správanie môžete zmeniť pomocou piateho parametru metódy MessageBox.Show():
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
Všimnite si na snímke obrazovky, ako je tlačidlo „Nie“ mierne zvýšené, aby bolo vizuálne naznačené, že je vybraté a ak sa stlačí tlačidlo Enter alebo medzera , bude vyvolané.
Úplný príklad
Ako som sľúbil, tu je úplný príklad použitý v tomto článku:
<Window x:Class="WpfTutorialSamples.Dialogs.MessageBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MessageBoxSample" Height="250" Width="300">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="0,0,0,10" />
</Style>
</StackPanel.Resources>
<Button Name="btnSimpleMessageBox" Click="btnSimpleMessageBox_Click">Simple MessageBox</Button>
<Button Name="btnMessageBoxWithTitle" Click="btnMessageBoxWithTitle_Click">MessageBox with title</Button>
<Button Name="btnMessageBoxWithButtons" Click="btnMessageBoxWithButtons_Click">MessageBox with buttons</Button>
<Button Name="btnMessageBoxWithResponse" Click="btnMessageBoxWithResponse_Click">MessageBox with response</Button>
<Button Name="btnMessageBoxWithIcon" Click="btnMessageBoxWithIcon_Click">MessageBox with icon</Button>
<Button Name="btnMessageBoxWithDefaultChoice" Click="btnMessageBoxWithDefaultChoice_Click">MessageBox with default choice</Button>
</StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.Dialogs
{
public partial class MessageBoxSample : Window
{
public MessageBoxSample()
{
InitializeComponent();
}
private void btnSimpleMessageBox_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!");
}
private void btnMessageBoxWithTitle_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!", "My App");
}
private void btnMessageBoxWithButtons_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
}
private void btnMessageBoxWithResponse_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
switch(result)
{
case MessageBoxResult.Yes:
MessageBox.Show("Hello to you too!", "My App");
break;
case MessageBoxResult.No:
MessageBox.Show("Oh well, too bad!", "My App");
break;
case MessageBoxResult.Cancel:
MessageBox.Show("Nevermind then...", "My App");
break;
}
}
private void btnMessageBoxWithIcon_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
}
private void btnMessageBoxWithDefaultChoice_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
}
}
}