2010-04-12 10 views

उत्तर

16

जब आप फॉर्म बनाते हैं तो कन्स्ट्रक्टर में कोड तत्काल चलता है, चाहे आपने कभी इसे प्रदर्शित किया हो या नहीं। Form.Load ईवेंट में चल रहा कोड एक ईवेंट हैंडलर है, इसलिए आप वास्तव में अन्य कक्षाओं में कोड (जो फॉर्म के लिए सदस्यता ले चुके हैं) कोड कोड कर सकते हैं। इसी तरह, आप कोड (कोड से) Form.OnLoad method कोड चलाने के लिए उपयोग कर सकते हैं।

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

+0

चीजों का युगल: 1- आप कितनी बार इसे एक फॉर्म बनाते हैं? (एएसपी अगर आपकी निर्भरताओं को देरी से जुड़ाव के साथ ठीक से इंजेक्शन दिया जाता है), 2- नीचे @ हंस द्वारा नोट किया गया है, तो आप इस बिंदु पर किसी भी नियंत्रण प्रारंभिकरण के लिए प्रदर्शन दंड लेते हैं बीसी आपका लेआउट निलंबित नहीं किया गया है, इसलिए फॉर्म पर सभी नियंत्रण प्रतिक्रिया देने का प्रयास कर रहे हैं शुरू होने के दौरान घटनाओं की तरह चीजों के लिए। 3- मैं अपना कोड कॉल करने के लिए ऑनलोड का उपयोग नहीं करूंगा; बल्कि MyAction() के लिए एक विधि बनाएं और ऑनलाड से MyAction() को कॉल करें- अन्यथा यह उपभोक्ताओं को स्पष्ट नहीं है कि उन्हें MyAction – Fred

+1

@Fred करने के लिए ऑनलोड को कॉल करने की आवश्यकता है, जो कुछ भी मैंने लिखा है उसके साथ संघर्ष के बारे में बहस नहीं कर रहा है। मैंने विशेष रूप से उल्लेख किया है कि ऑनलोड लोड करने के बाद होता है, और ऑनलोड में * नियंत्रण * जोड़ने का सुझाव नहीं दिया। आपके बिंदु 3 के लिए- उपभोक्ता कभी भी "ऑनलोड को कॉल नहीं करते" - यह रनटाइम में होता है। यदि किसी अन्य स्थान पर कोड का पुन: उपयोग नहीं किया जा रहा है, तो किसी अन्य विधि को पेश करने के लिए कोई विशिष्ट लाभ नहीं है। (मैं पूरी तरह से सहमत हूं, हालांकि, यदि "माईएक्शन" कुछ ऐसा है जिसे पुन: उपयोग किया जाएगा, तो यह अपनी पद्धति में होना चाहिए - मेरा उत्तर निरर्थक नहीं है या उल्लिखित सुझाव नहीं देता है, हालांकि –

+0

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

27

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

ऑनलोड मोड में नियंत्रण प्रारंभ करना संभव है लेकिन यह बहुत धीमा हो सकता है, खासकर ListView और TreeView के लिए। यदि आप उन्हें कन्स्ट्रक्टर में प्रारंभ करते हैं, तो उनके मूल विंडोज नियंत्रण बनाए जाने पर उन्हें थोक-प्रारंभिक किया जा सकता है।

एक विशेष अपवाद: एक एमडीआई बाल खिड़की बनाना हमेशा ऑनलोड() में किया जाना चाहिए, प्लंबिंग कोड में एक बग है जो एमडीआई बार को गड़बड़ कर देता है जब आप कन्स्ट्रक्टर में कोई बच्चा बनाते हैं।

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