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:

TaskDialog Pattern.png

0 komentarzy