2011-08-23 11 views
18

अगर मैं बंद फोन() मेरी WinForm में, ऐसा लगता है मुझे लगता है कि भले ही DialogResult समय में कोई नहीं है, सही होने के बाद मैं बंद फोन() यह रद्द करने के लिए सेट है।WinForms बंद() सेट DialogResult रद्द करने के लिए

इस ध्वनि सामान्य है?

उत्तर

17

कि पूरी तरह से सामान्य है, के रूप में यह इच्छित व्यवहार है। हालांकि, यह लाल "X" फार्म के ऊपरी दाएं कोने में क्लिक करता है, तो आप एक एमडीआई या ShowDialog() उपयोग कर रहे हैं के बराबर नहीं है।

एक रूप एक मॉडल संवाद बॉक्स के रूप में प्रदर्शित किया जाता है जब बंद बटन (प्रपत्र के शीर्ष-दाएँ कोने में एक एक्स के साथ बटन) पर क्लिक करके, प्रपत्र का कारण बनता है छिपाना चाहता है और DialogResult संपत्ति के लिए DialogResult.Cancel पर सेट करें। जब उपयोगकर्ता एक संवाद बॉक्स के क्लोज बटन पर क्लिक करता है या DialogResult संपत्ति के मूल्य सेट बंद विधि स्वतः नहीं बुलाया जाता है। इसके बजाए, फॉर्म छुपा हुआ है और डायलॉग बॉक्स का नया उदाहरण बनाये बिना फिर से दिखाया जा सकता है। इस व्यवहार के कारण, आप प्रपत्र के निपटान विधि प्रपत्र अब अपने आवेदन के लिए आवश्यक है जब कॉल करना होगा।

DialogResult मूल्य हालांकि अधिरोहित जा सकता है:

आप कर सकते हैं जब उपयोगकर्ता के लिए एक ईवेंट हैंडलर में DialogResult संपत्ति की स्थापना द्वारा बंद बटन पर क्लिक करता DialogResult प्रॉपर्टी को निर्दिष्ट मान को ओवरराइड फॉर्म की समाप्ति घटना।

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.dialogresult(v=VS.100).aspx

+0

वहाँ किसी भी प्रलेखन कि वास्तव में सामान्य, बंद() विधि DialogResult मूल्य रद्द करने के लिए स्थापित करने का इरादा व्यवहार का वर्णन करता है? – Fernando

+0

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

24

या और भी आसान, आप बस बंद के बाद DialogResult सेट कर सकते हैं। उदाहरण के लिए, यह सोचते हैं ValidateSettings उपयोगकर्ता प्रपत्र के साथ कोई समस्या या दिखाएगा अन्यथा सच वापसी:

private void btnOK_Click(object sender, EventArgs e) 
    { 
     if (ValidateSettings()) 
     { 
      SaveSettings(); 
      Close(); 
      DialogResult = DialogResult.OK; 
     } 
    } 
+0

नोट: WPF में आप फ़ॉर्म बंद होने के बाद 'Window.DialogResult' को नहीं बदल सकते हैं। –

+1

@ ज़ीएक्सज़ - ठीक है, लेकिन यह एक विनफॉर्म प्रश्न है और कोड एक विनफॉर्म उत्तर था जिसे मैंने उस वातावरण में परीक्षण किया था। कोई भी इसे कम वोट दे सकता है क्योंकि यह रेल पर रूबी पर काम नहीं करता है, लेकिन यह थोड़ा सा अनुचित लगता है। या क्या मुझे कुछ याद आ रहा है क्योंकि मैं जावा में बहुत लंबे समय से काम कर रहा हूं। :) –

+0

मैंने डाउनवोट या कुछ नहीं किया ... बस कुछ WPF जानकारी नोट किया। बिट ऑफटॉपिक, हां, लेकिन उन लोगों के लिए आपके उत्तर के लिए उपयोगी विस्तार जो वास्तव में इस प्रश्न में शोध कर रहे हैं (जैसे मैंने किया, और सोचा कि अन्य लोग भी जानकारी का उपयोग कर सकते हैं - ठीक है)। मुझे खेद है कि अगर आप इसे अपराध के रूप में लेते हैं, तो ऐसा कहें और मैं टिप्पणी हटा देता हूं। –

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