Udostępnij za pośrednictwem


Jak zamknąć okno lub okno dialogowe (WPF .NET)

W tym artykule poznasz różne sposoby zamykania okna lub okna dialogowego. Użytkownik może zamknąć okno przy użyciu elementów w obszarze niekliencką, w tym następujących elementów:

  • Element Zamknij menu System.
  • Naciśnięcie klawiszy ALT + F4.
  • Naciśnięcie przycisku Zamknij.
  • Naciśnięcie klawisza ESC, gdy przycisk ma dla właściwości IsCancel ustawioną wartość true w oknie modalnym.

Podczas projektowania okna podaj więcej mechanizmów dla obszaru klienta, aby zamknąć okno. Niektóre typowe elementy projektu w oknie, które są używane do jego zamknięcia, obejmują następujące elementy:

  • Element Zakończ w menu Plik, zwykle w przypadku głównych okien aplikacji.
  • Element Zamknij w menu Plik, zwykle w pomocniczym oknie aplikacji.
  • Przycisk Anuluj, zwykle w modalnym oknie dialogowym.
  • Przycisk Zamknij, zwykle w niemodalnym oknie dialogowym.

Ważne

Po zamknięciu okna nie można użyć tego samego wystąpienia obiektu do ponownego otwarcia okna.

Aby uzyskać więcej informacji na temat okresu istnienia okna, zobacz Omówienie okien WPF: okres istnienia okna.

Zamykanie modalnego okna

Podczas zamykania okna, które zostało otwarte za ShowDialog pomocą metody, ustaw DialogResult właściwość na true wartość lub false , aby wskazać odpowiednio stan "zaakceptowane" lub "anulowane". Gdy tylko DialogResult właściwość zostanie ustawiona na wartość, okno zostanie zamknięte. Poniższy kod demonstruje ustawienie DialogResult właściwości :

private void okButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = true;

private void cancelButton_Click(object sender, RoutedEventArgs e) =>
    DialogResult = false;
Private Sub okButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = True
End Sub

Private Sub cancelButton_Click(sender As Object, e As RoutedEventArgs)
    DialogResult = False
End Sub

Możesz również wywołać metodę Close . Close Jeśli jest używana metoda, właściwość jest ustawiona DialogResult na falsewartość .

Po zamknięciu okna nie można go ponownie otworzyć za pomocą tego samego wystąpienia obiektu. Jeśli spróbujesz wyświetlić to samo okno, zostanie zgłoszony element InvalidOperationException . Zamiast tego utwórz nowe wystąpienie okna i otwórz je.

Zamykanie okna bez moderowania

Podczas zamykania okna, które zostało otwarte za Show pomocą metody , użyj Close metody . Poniższy kod demonstruje zamknięcie okna bez moderowania:

private void closeButton_Click(object sender, RoutedEventArgs e) =>
    Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
    Close()
End Sub

Zamknij za pomocą funkcji IsCancel

Właściwość Button.IsCancel można ustawić tak true , aby umożliwić automatyczne zamykanie okna za pomocą klucza ESC . To działa tylko wtedy, gdy okno jest otwarte za pomocą ShowDialog metody .

<Button Name="cancelButton" IsCancel="True">Cancel</Button>

Ukrywanie okna

Zamiast zamykać okno, okno może być ukryte za pomocą Hide metody . Ukryte okno można ponownie otworzyć, w przeciwieństwie do okna, które zostało zamknięte. Jeśli zamierzasz ponownie użyć wystąpienia obiektu okna, ukryj okno zamiast go zamknąć. Poniższy kod demonstruje ukrywanie okna:

private void saveButton_Click(object sender, RoutedEventArgs e) =>
    Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
    Hide()
End Sub

Anuluj zamykanie i ukrywanie

Jeśli przyciski zostały zaprojektowane tak, aby ukryć okno zamiast go zamknąć, użytkownik nadal może pominąć to i zamknąć okno. Zamknij element menu systemowego i przycisk Zamknij obszaru innego niż klient okna, zamknie okno zamiast go ukryć. Rozważmy ten scenariusz, gdy twoim zamiarem jest ukrycie okna zamiast zamykania.

Uwaga

Jeśli okno jest wyświetlane modalnie z elementem ShowDialog, DialogResult właściwość zostanie ustawiona na null wartość , gdy okno jest ukryte. Musisz przekazać stan z powrotem do kodu wywołującego, dodając własną właściwość do okna.

Po zamknięciu Closing okna jest zgłaszane zdarzenie. Procedura obsługi jest przekazywana jako CancelEventArgselement , który implementuje Cancel właściwość . Ustaw dla tej właściwości wartość , aby true zapobiec zamykaniu okna. Poniższy kod pokazuje, jak anulować zamknięcie, a zamiast tego ukryć okno:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    // Cancel the closure
    e.Cancel = true;

    // Hide the window
    Hide();
}
Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)
    ' Cancel the closure
    e.Cancel = True

    ' Hide the window
    Hide()
End Sub

Czasami nie chcesz ukrywać okna, ale w rzeczywistości uniemożliwić użytkownikowi jego zamknięcie. Aby uzyskać więcej informacji, zobacz Omówienie okien WPF: anulowanie zamknięcia okna.

Zobacz też