Bir pencereyi veya iletişim kutusunu kapatma (WPF .NET)
Bu makalede, bir pencereyi veya iletişim kutusunu kapatmanın farklı yolları hakkında bilgi bulabilirsiniz. Kullanıcı, aşağıdakiler de dahil olmak üzere istemci olmayan alanda yer alan öğeleri kullanarak bir pencereyi kapatabilirsiniz:
- Sistem menüsününKapat öğesi.
- ALT + F4 tuşlarına basılarak.
- Kapat düğmesine basın.
- Kalıcı pencerede özelliği olarak ayarlanmış bir düğme olduğunda ESC
truetuşuna basın.
Pencere tasarlarken, bir pencereyi kapatmak için istemci alanına daha fazla mekanizma sağlar. Bir pencereyi kapatmak için kullanılan yaygın tasarım öğeleri şunlardır:
- Dosya menüsünde, genellikle ana uygulama pencereleri için bir Çıkış öğesi.
- Dosya menüsünde, genellikle ikincil uygulama penceresindeki Bir Kapat öğesi.
- Genellikle kalıcı iletişim kutusunda bir İptal düğmesi.
- Kapat düğmesi, genellikle bir modsuz iletişim kutusunda.
Önemli
Bir pencere kapatılan pencereyi yeniden açmak için aynı nesne örneği kullanılamaz.
Bir pencerenin ömrü hakkında daha fazla bilgi için bkz. WPF pencerelerinin genel bakışı: Pencere ömrü.
Kalıcı pencereyi kapatma
yöntemiyle açılan bir pencere kapatılıyorsa, özelliğini sırasıyla ShowDialogDialogResulttrue "kabul edildi" veya "iptal edildi" durumunu belirtmek için veya false olarak ayarlayın. Özellik bir DialogResult değere ayarlanır ayarlamaz pencere kapanır. Aşağıdaki kod, özelliğinin ayar olduğunu DialogResult gösteriyor:
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 Close çağırebilirsiniz. yöntemi Close kullanılırsa özelliği DialogResult olarak false ayarlanır.
Bir pencere kapatıldıktan sonra aynı nesne örneğiyle yeniden açılamayabilirsiniz. Aynı pencereyi göstermeyi InvalidOperationException denersiniz, bir olur. Bunun yerine, pencerenin yeni bir örneğini oluşturun ve açın.
Modsuz pencereyi kapatma
yöntemiyle açılan bir pencereyi Show kapatırken yöntemini Close kullanın. Aşağıdaki kodda, modeless penceresinin kapatılması gösterilir:
private void closeButton_Click(object sender, RoutedEventArgs e) =>
Close();
Private Sub closeButton_Click(sender As Object, e As RoutedEventArgs)
Close()
End Sub
IsCancel ile kapatma
Pencereyi Button.IsCancel otomatik olarak kapatmak için ESC anahtarını trueButton.IsCancel için özelliği olarak ayarlanmıştır. Bu yalnızca pencere yöntemiyle açıldığında ShowDialog çalışır.
<Button Name="cancelButton" IsCancel="True">Cancel</Button>
Pencereyi gizleme
Bir pencereyi kapatmak yerine yöntemiyle bir pencere Hide gizlenir. Kapatılan bir pencerenin aksine gizli bir pencere yeniden açabilirsiniz. Bir pencere nesnesi örneğini yeniden kullanmak için pencereyi kapatmak yerine gizleyebilirsiniz. Aşağıdaki kod, bir pencereyi gizlemeyi gösterir:
private void saveButton_Click(object sender, RoutedEventArgs e) =>
Hide();
Private Sub saveButton_Click(sender As Object, e As RoutedEventArgs)
Hide()
End Sub
Kapatma ve gizlemeyi iptal etme
Düğmelerinizi pencereyi kapatmak yerine gizleyebilirsiniz. Kullanıcı yine de bunu atlayarak pencereyi kapatabilirsiniz. Sistem menüsünün Kapat öğesi ve pencerenin istemci olmayan alanında yer alan Kapat düğmesi, pencereyi gizleme yerine kapatır. Amacınız pencereyi kapatmak yerine gizlemek olduğunda bu senaryoyu düşünün.
Dikkat
Bir pencere ile mod olarak ShowDialogDialogResult gösteriliyorsa, pencere null gizlenirken özelliği olarak ayarlanır. Pencereye kendi özelliğinizi ekleyerek durumu çağırma koduna geri iletebilirsiniz.
Bir pencere kapatılan olay Closing ortaya çıkar. İşleyiciye, CancelEventArgs özelliğini uygulayan bir Cancel geçirildi. Bir pencerenin kapanmasını true önlemek için bu özelliği olarak ayarlayın. Aşağıdaki kod, kapatma işleminin nasıl iptal edildiğini ve bunun yerine pencereyi gizlemeyi 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
Bir pencereyi gizlemek istemeyebilirsiniz ancak aslında kullanıcının pencereyi kapatmasını önlersiniz. Daha fazla bilgi için bkz. WPF pencerelerini genel bakış: Pencere kapanışını iptal etme.