Aracılığıyla paylaş


Bir pencereyi veya iletişim kutusunu kapatma (WPF .NET)

Bu makalede, bir pencereyi veya iletişim kutusunu kapatmanın farklı yolları hakkında bilgi edineceksiniz. Kullanıcı, aşağıdakiler de dahil olmak üzere istemci olmayan alandaki öğeleri kullanarak bir pencereyi kapatabilir:

  • Sistem menüsünün Kapat öğesi.
  • ALT + F4 tuşlarına basarak.
  • Kapat düğmesine basarak.
  • Bir düğmenin IsCancel özelliği kalıcı bir pencerede true olarak ayarlandığında ESC tuşuna basarak.

Pencere tasarlarken, bir pencereyi kapatmak için istemci alanına daha fazla mekanizma sağlayın. Pencereyi kapatmak için kullanılan penceredeki yaygın tasarım öğelerinden bazıları şunlardır:

  • Genellikle ana uygulama pencereleri için Dosya menüsünde Çıkış öğesi.
  • Genellikle ikincil bir uygulama penceresi için Dosya menüsünde Çıkış öğesi.
  • Genellikle kalıcı bir iletişim kutusunda bulunan İptal düğmesi.
  • Genellikle modsuz iletişim kutusunda bulunan Kapat düğmesi.

Önemli

Bir pencere kapatıldıktan sonra, pencereyi yeniden açmak için aynı nesne örneği kullanılamaz.

Pencerenin ömrü hakkında daha fazla bilgi için bkz . WPF pencerelerine genel bakış: Pencere ömrü.

Kalıcı pencereyi kapatma

yöntemiyle ShowDialog açılan bir pencereyi kapatırken, özelliğini sırasıyla "kabul edildi" veya false "iptal edildi" durumunu belirtmek için ya da true olarak ayarlayınDialogResult. Özellik bir değere ayarlandığı anda DialogResult pencere kapatılır. Aşağıdaki kod özelliğin ayarlanmasını DialogResult gösterir:

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

Yöntemini de çağırabilirsiniz Close . Close yöntemi kullanılırsa özelliği DialogResult olarak falseayarlanır.

Bir pencere kapatıldıktan sonra aynı nesne örneğiyle yeniden açılamaz. Aynı pencereyi göstermeye çalışırsanız, bir InvalidOperationException oluşturulur. Bunun yerine pencerenin yeni bir örneğini oluşturun ve açın.

Modsuz pencereyi kapatma

yöntemiyle Show açılan bir pencereyi kapatırken yöntemini kullanın Close . Aşağıdaki kod, modsuz bir pencerenin kapatılmasını gösterir:

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

IsCancel ile kapat

Button.IsCancel esc tuşunun pencereyi otomatik olarak kapatmasını sağlamak için özelliği olarak ayarlanabilirtrue. Bu yalnızca pencere yöntemiyle ShowDialog açıldığında çalışır.

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

Pencereyi gizleme

Pencere kapatmak yerine yöntemiyle bir pencere gizlenebilir Hide . Kapatılmış bir pencerenin aksine gizli bir pencere yeniden açılabilir. Bir pencere nesnesi örneğini yeniden kullanacaksanız pencereyi kapatmak yerine gizleyin. Aşağıdaki kod bir pencerenin gizlendiğini gösterir:

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

Kapatmayı ve gizlemeyi iptal etme

Düğmelerinizi pencereyi kapatmak yerine gizleyecek şekilde tasarladıysanız, kullanıcı yine de bunu atlayabilir ve pencereyi kapatabilir. Sistem menüsünün Kapat öğesi ve pencerenin istemci olmayan alanının Kapat düğmesi, pencereyi gizlemek yerine kapatır. Amacınız pencereyi kapatmak yerine gizlemek olduğunda bu senaryoya göz önünde bulundurun.

Dikkat

ile bir pencere mod olarak ShowDialoggösteriliyorsa, pencere gizlendiğinde DialogResult özelliği olarak null ayarlanır. Pencereye kendi özelliğinizi ekleyerek durumunuzu çağıran koda geri iletmeniz gerekir.

Bir pencere kapatıldığında, Closing olay oluşturulur. İşleyiciye, özelliğini uygulayan Cancel bir CancelEventArgsgeçirilir. Bir pencerenin kapanmasını önlemek için bu özelliği olarak true ayarlayın. Aşağıdaki kod, kapatma işleminin nasıl iptal edileceğini ve bunun yerine pencerenin nasıl gizleneceklerini gösterir:

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

Bazen bir pencereyi gizlemek istemeyebilir, ancak aslında kullanıcının pencereyi kapatmasını engelleyebilirsiniz. Daha fazla bilgi için bkz . WPF pencerelerine genel bakış: Pencere kapatmayı iptal etme.

Ayrıca bkz.