Okna dialogowe
msm
Wstęp
Okna dialogowe - to okna mające za zadanie zapytanie użytkownika o potrzebne programowi koordynaty. Najczęściej mają trzy przyciski - "Tak", "Nie" i "Anuluj", ale możemy użyć też paru innych zestawów przycisków.
Najbardziej chyba znanym oknem dialogowym świata jest okno wyświetlające się podczas wyłączania notatnika - "Tekst w pliku Bez tytułu zmienił się. Czy chcesz zapisać zmiany?" - i on będzie parokrotnie służył nam jako przykład.
Tworzenie nowego okna
Okna dialogowe tworzymy za pomocą polecenia MessageBox.Show(); - kolejne argumenty tu kolejno:
- Wiadomość: Parametr typu string. Jest to wiadomość wyświetlana w oknie dialogowym. Tak jak obiecywałem - na przykładzie notatnika:
MessageBox.Show("Tekst w pliku Bez tytułu zmienił się. Czy chcesz zapisać zmiany?")
- Tytuł: Parametr typu string. Jest to tytuł wiadomości (wyświetlany na niebieskim pasku u góry). Ten i następne parametry nie są konieczne.
MessageBox.Show("Tekst w pliku Bez tytułu zmienił się. Czy chcesz zapisać zmiany?", "Notatnik")
- Przyciski: Parametr typu MessageBoxButtons. To przyciski które będziemy widzieć na oknie dialogowym. Nie będę wymieniać wszystkich możliwych układów przycisków (wystarczy wpisać MessageBoxButtons i dodać kropkę by zobaczyć je wszystkie), warto jednak zauważyć że nie musimy się troszczyć w jakim języku napisać tekst przycisków - dba o to system operacyjny i zdefiniowane w nim stałe, czyli to samo okno na komputerze polskim, angielskim i czeskim będzie miało inne przyciski. I jeszcze jedno - w razie pominięcia tego argumentu okno ma tylko przycisk "OK".
MessageBox.Show("Tekst w pliku Bez tytułu zmienił się. Czy chcesz zapisać zmiany?",
"Notatnik",
MessageBoxButtons.YesNoCancel)
- Ikona: Parametr typu MessageBoxIcon. To właśnie ikona wyświetlana po lewej stronie okienka. Tak samo jak w przypadku przycisków, występuje tutaj dużo możliwości i nie będę ich wszystkich opisywał.
MessageBox.Show("Tekst w pliku Bez tytułu zmienił się. Czy chcesz zapisać zmiany?",
"Notatnik",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning)
I to jest właśnie pełnia możliwości okna wiadomości.
Odbieranie informacji
Czasem jednak, kiedy potrzebujemy "porady" użytkownika, samo wysłanie wiadomości nie wystarcza. Wtedy warto zastanowić się nad umieszczeniem w kodzie następującej konstrukcji:
if (MessageBox.Show("Czy na pewno chcesz wyłączyć program?", "Już nie notatnik", MessageBoxButtons.YesNo) == DialogResult.Yes)
Close()
Kliknięcie przycisku "Tak" na oknie spowoduje zamknięcie formy - jeżeli jest to forma główna, program automatycznie się wyłączy. Można oczywiście dołączyć jeszcze else.
Dialogi jako formy Windows Forms
Zwykła forma też może posłużyć jako forma dialogowa i zwrócić wynik dialogowy. Samo w sobie wywołanie MessageBox.Show(...)
też otwiera nową formę. Aby posłużyć się zwykłą formą jako formą dialogową wystarczy, że wywołamy metodę ShowDialog()
, która informuje formę, że ma zwrócić wynik dialogowy. Potem możemy przechwycić to co zostało wybrane.
Form2 frm = new Form2();
MessageBox.Show(frm.ShowDialog().ToString()); // konwertujemy wybór na string'a i wyświetlamy
I tak oto łatwo można obsługiwać formy jak zwykłe okna dialogowe.
Inne formy dialogowe
W internecie dostępny jest pakiet Windows API Code Pack. Z biblioteki Microsoft.WindowsAPICodePack.Shell.dll
mamy dostęp do dialogu TaskDialog
. Jest to ten dialog używany w Windows Vista i Windows 7. Aby go zastosować po prostu należy utworzyć obiekt TaskDialog
, w odpowiedni sposób ustawić jego wygląd w kodzie i wyświetlić, co najważniejsze należy odebrać wynik dialogu, bo temu służy ta forma. Poniżej screenshot jak wygląda ten TaskDialog
: