2010-09-08 19 views
9

जब मैं कोई फॉर्म बनाता हूं, तो ऑटो-जेनरेट कोड में ओवरराइड डिस्प्ले विधि शामिल नहीं होती है। क्या इसका मतलब है कि फॉर्म में सभी नियंत्रणों के लिए निपटान नहीं किया जा रहा है?फॉर्म करता है। (निपटान)() कॉल के अंदर नियंत्रण नियंत्रण()?

उत्तर

12

जब आप फॉर्म पर Dispose पर कॉल करते हैं, तो यह पर प्रत्येक नियंत्रण के लिए Controls संग्रह में कॉल करेगा। वे नियंत्रण बदले में ऐसा ही करेंगे, इसलिए अंत में सभी नियंत्रण 'Dispose विधि को लागू किया जाना चाहिए था। ध्यान दें कि यह इस बात पर आधारित नहीं है कि डिजाइनर में नियंत्रण मौजूद हैं या नहीं; यह Dispose पर कॉल के समय Controls फ़ॉर्म में संग्रह के नियंत्रण उदाहरणों पर आधारित है।

केवल मामला है जब मैं देख सकता था कि ऐसा नहीं होगा यदि आप बनाने के कुछ कंटेनर अपने आप को नियंत्रित करने और कॉल या तो करने के लिए आधार वर्ग या निहित नियंत्रण से अधिक पुनरावृति और उन पर Dispose फोन प्रचार के बिना Dispose ओवरराइड है।

+0

Yup। घटकों को अलग-अलग किया जाता है, यही वह है जो ऑटो-जेनरेट डिस्प्ले() विधि का ख्याल रखता है। नियंत्रण संग्रह से नियंत्रण निकालना और इसे निपटाना नहीं है रिसाव का एक अच्छा तरीका है। –

4

यह चाहिए। आपको YourForm.designer.cs फ़ाइल में देखना पड़ सकता है। यह इस तरह दिखेगा:

protected override void Dispose(bool disposing) 
{ 
    if(disposing && (components != null)) 
    { 
     components.Dispose(); 
    } 
    base.Dispose(disposing) 
} 

base.Dispose(); कॉल नियंत्रण प्रपत्र को जोड़ा गया सफाई का ख्याल रखना होगा।

+0

यह बिल्कुल सही नहीं है; 'घटक' फ़ील्ड 'शून्य' है जब तक कि आपके पास फॉर्म पर गैर-UI घटक (जैसे 'टाइमर', 'हेल्पप्रोवाइडर' या 'पृष्ठभूमिवर्कर') न हो। 'घटकों' उन घटकों का निपटान संभालती है। यह बटन * टेक्स्ट बॉक्स जैसे अन्य नियंत्रणों पर * निपटान नहीं करता है। –

+0

बिल्कुल, फॉर्म के नियंत्रण वास्तव में कॉल के माध्यम से 'आधार। निपटान()', अर्थात् 'नियंत्रण। डिस्प्ले()' के अंदर निपटाया जाता है। वास्तव में बहुत अधिक सफाई हो रही है जैसा कि आप देखेंगे कि 'फॉर्म। डिस्प्ले()' को रिफ्लेक्टर के साथ देखें। –

+0

अद्यतन, टिप्पणियों के लिए धन्यवाद – SwDevMan81

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