2009-06-13 16 views
25

डब्ल्यूपीएफ की Window.ShowDialog विधि एक नालीबल बूलियन लौटाती है। तो CommonDialog.ShowDialog करता है।ShowDialog कब होगा() वापस शून्य?

अब, मैं उन मामलों को समझता हूं जहां ये झूठी वापसी (उपयोगकर्ता ने रद्द या दबाए गए एसीसी पर क्लिक किया), और जब वे सही वापस आ जाएंगे (कोड Window.DialogResult को सत्य पर सेट करता है, शायद ठीक क्लिक करने के जवाब में)। लेकिन शून्य?

मेरा पहला विचार यह है कि शीर्षक बार के बंद बटन पर क्लिक करने से शून्य वापस आ सकता है। लेकिन दस्तावेज़ राज्य (और मैंने परीक्षण द्वारा पुष्टि की) कि the title-bar Close button is treated as a Cancel

तो Window.ShowDialog या CommonDialog.ShowDialog कब वापस शून्य होगा?

+0

आपको एमएस दस्तावेज से प्यार करना है। "एक नलबल <(Of <(T>)>) प्रकार बूलियन का मूल्य जो दर्शाता है कि उपयोगकर्ता द्वारा विंडो को कैसे बंद किया गया था।" जी, वह मदद करता है। –

+0

ऐसे दस्तावेज की तरह लगता है जहां लेखकों को डेवलपर्स से बात करने और प्रश्न पूछने की अनुमति नहीं थी, लेकिन उन्हें केवल स्क्रीन पर जो कुछ था, उस तक पहुंच की अनुमति थी ... – SqlRyan

उत्तर

17

विधि हमेशा सत्य या गलत लौटाती है, और यह हमेशा बंद होने पर विंडो की डायलॉग रीसेट संपत्ति के बराबर होती है।

लेकिन विंडो बंद होने से पहले DialogResult संपत्ति शून्य है, और दूसरा धागा संपत्ति की जांच कर सकता है। तो यह समझ में आता है कि रिटर्न वैल्यू संपत्ति से मेल खाने के लिए एक बेकार बुलियन है, भले ही यह वास्तव में शून्य न हो।

+0

यह सुनिश्चित नहीं है कि आपको यह विचार कहां मिलेगा कि एक और धागा DialogResult की जांच करें। यदि आप कोशिश करते हैं, तो आपको एक अवैधऑपरेशन अपवाद प्राप्त होता है ("कॉलिंग थ्रेड इस ऑब्जेक्ट तक नहीं पहुंच सकता है क्योंकि एक अलग थ्रेड इसका मालिक है।") –

+5

कोई अन्य धागा नहीं है, लेकिन संवाद पर किसी ईवेंट हैंडलर पर चल रहे किसी भी कोड (कहें) का मूल्य पुनर्प्राप्त कर सकता है इसे पूरा करने से पहले DialogResult। व्यक्तिगत रूप से मुझे लगता है कि यह एक खराब डिजाइन पसंद है। यह गैर-शून्य हो सकता है, संवाददाता छोड़ने से पहले पहुंचने पर गेटटर अपवाद फेंकना चाहिए। –

2

यदि मैं बटन के लिए क्लिक ईवेंट में DialogResult = null वापस करता हूं, तो विंडो खुलती रहती है।

private void OkButton_Click(object sender, RoutedEventArgs e) 
{ 
    Button btn = sender as Button; 
    if (btn != null) 
    { 
     // forces all control to update... 
     btn.Focus(); 
    } 

    // TEST IF OK TO CLOSE 
    bool rc = _vm.ProcessOkCommand(); 
    if (rc) 
    { 
     DialogResult = true; 
    } 
    else 
    { 
     DialogResult = null; 
    } 
} 


<Button Content="OK" Name ="cmdOK" IsDefault="True" Click="OkButton_Click"/> 
+0

ठीक है, यह मेरा मुद्दा है - ऐसा लगता है कि ShowDialog कभी वापस नहीं आ जाएगा। –

+0

'DialogResult = null;' सेट करने से कुछ भी करने से बेहतर नहीं है। प्रभावी रूप से दोनों ही मुझे लगता है। यदि मैं गलत हूं तो मुझे सही करों। –

संबंधित मुद्दे