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 false
ayarlanı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.
.NET Desktop feedback