2009-09-04 21 views
8

'daki ShowDialog() öğesinden sonra ayarla Bazen Show() kullanarak açtığım ve bazen ShowDialog() kullanarak bir pencerem var. İkinci durumda, geri dönen iletişim sonucu benim için önemlidir. Ancak Show()'u aradıktan sonra DialogResult'u ayarladıysam InvalidOperationException'u alırım. Pencereyi açmak ve buna göre DialogResult'u ayarlamak için hangi yöntemin kullanıldığını öğrenmenin bir yolu var mı? Ya da başka bir yol var mı?DialogResult ayarını yalnızca WPF

Elbette istisnai yakalayabileceğimi ve görmezden gelebileceğimi biliyorum, ancak bu çözümü sevmiyorum.

cevap

9

Pencerenin içinde, kalıcı bir iş parçacığı üzerinde çalışıp çalışmadığını belirlemek için System.Windows.Interop.ComponentDispatcher.IsThreadModal kullanın.

+0

Teşekkürler, istediğim tam olarak bu. – svick

+0

Her zaman işe yaramıyor, bizim durumumuzda DialogResult = x; Doğru davranış için bir deneyin/yakalama çağrısı. – Doug

0

Sadece bu.DialogResult = DialogResult.blah'i form kapatma etkinliğinde ayarlamaya ne dersiniz?

+1

Bu nasıl yardımcı olur? Bu, Show() 'dan sonra bile ayarlayabilir ve istisnaya neden olur. BTW WPF kullanıyorum (bunu açıkça belirtmedim) bu nedenle DialogResult dosyası bool ?. Bunu yapmadan önce – svick

+0

.Close(); kalıcı pencerede this.DialogResult = DialogResult.OK; ve ana formda bu tam olarak aldığım şeydir. Teşekkür ederim sgrassie :) – balexandre

3

Reflektör'de set_DialogResult'a bakarsanız, iletişim kutusunun kalıcı olup olmadığını belirlemek için _showingAsDialog'u denetler. Ne yazık ki bu özel bir alan.

Her zaman Show()/ShowDialog() öğesini çağırmadan önce pencerenin yeni bir örneğini oluşturuyor musunuz? Eğer öyleyse, nasıl gösterileceğini belirten kurucuya bir argüman iletebilirsiniz.

2

Kullanım türünü kontrol etmek için Form.Modal özelliğini kullanabilirsiniz.

Form.Show() kullanımı durumunda, arayanın Form ile ilgili herhangi bir sonuç bildirmesini sağlamak için başka bir yöntem kullanmanız gerekir.

Formu göstermenin iki yolunu kullanmanın bir nedeni var mı?

+2

Bu özellik WPF'de mevcut değil – McAden

İlgili konular