2012-08-15 9 views
8

अगर मैं एक WinForms "MyForm" उसके बाद निम्न बॉयलर प्लेट कोड उत्पन्न होता है बनाने के लिए:प्रारंभिक कॉम्पोनेंट() कोड ऑर्डर में कहां दिखाना चाहिए?

public partial class myForm: Form 
{ 
    public myForm() 
    { 

     //<<position 1 

     InitializeComponent(); 

     //<<position 2 

    } 
} 

मैं निर्माता विधि करने के लिए अतिरिक्त कोड जोड़ देते हैं तो यह एप्लिकेशन को चलाने के लिए किसी भी फर्क पड़ता है अगर मैं जगह मेरी स्थिति 1 या 2 में कोड?

उत्तर

12

हाँ, यह करता है।

InitializeComponent वह तरीका है जो वीएस उत्पन्न करता है जो किसी फ़ॉर्म पर नियंत्रण बनाने और स्थिति बनाने के लिए ज़िम्मेदार है।

नियंत्रण स्थिति से पहले "स्थिति 1" में कोड निष्पादित होगा। यदि आप इस स्थिति में नियंत्रण तक पहुंचने का प्रयास करते हैं, तो आपको NullReferenceException मिलेगा (कहें, यदि आप TextBox की सामग्री सेट करने का प्रयास करते हैं)। "स्थिति 2" में समान कोड अपेक्षित के रूप में काम करेगा।

हालांकि "स्थिति 1" का उपयोग होता है: यदि आपके पास कस्टम फॉर्म या व्यवहार है जो आपके फॉर्म के गुणों पर भरोसा करता है, तो "गुण 1" में उन गुणों को सेट करने से आप उस कोड को रीफ्रेश करने से रोक सकते हैं यदि आप नियंत्रण को अनुमति देते हैं उन मानों को सेट करने से पहले बनाया जाना चाहिए।

1

फ़ंक्शन में प्रारंभिक कॉम्पोनेंट(); आप अपने सभी ऑब्जेक्ट्स को ग्राफ़िकल लेआउट में डालते हैं। यदि आप उन्हें एक्सेस करना चाहते हैं, तो आपका कोड स्थिति 2 में होना चाहिए।

2

हां। प्रारंभिक से पहले सभी नियंत्रण अभी तक नहीं बनाए गए हैं।

+0

छोटा और प्रभावी :) – whytheq

0

button, textbox, combobox कि आप Form पर डाल स्वचालित रूप से बनाता कुछ code.This कोड InitializeComponent()

तो नियंत्रण है कि आप position 1 से फार्म पर डाल बुला में उत्पन्न होता है गलत है, क्योंकि नियंत्रण कोड के उस बिंदु पर कभी नहीं बनाया।

आप फोन और नियंत्रण है कि आप से position 2

+0

धन्यवाद - लेकिन जैसा कि अन्य उत्तर में से कुछ का उल्लेख - स्थान 1 कुछ परिस्थितियों में इस्तेमाल किया जा सकता – whytheq

0

दूसरों को यहाँ की तरह फार्म पर डाल ने कहा है कि उपयोग कर सकते हैं, स्थिति 2 ज्यादातर मामलों में इस्तेमाल किया जाना चाहिए। हालांकि, ऐसे अपवाद हैं जहां पदों में से कोई भी काम नहीं करेगा, और आपको वास्तव में एक अन्य घटना में अपना कोड संलग्न करना होगा।

उदाहरण: आप एक ScrollViewer और एक छवि इसके अंदर है। आप चारों ओर स्क्रॉल करने के लिए एक विकल्प के साथ छवि घटक में एक बड़ा छवि फ़ाइल डाल सकते हैं और इसलिए छवि के केन्द्र शुरू में दिखाई दे रहा है यह दिखाना चाहते हैं, छवि के बाकी को देखने के लिए:

scrollViewer1.ScrollToVerticalOffset(scrollViewer1.ScrollableHeight/2); 

हालांकि प्रारंभिक कॉम्पोनेंट() (या यहां तक ​​कि) के बाद या तो आप इसे इच्छित परिणाम नहीं देंगे। (क्योंकि, इस चरण में घटकों को प्रारंभ किया गया है, भले ही आपको निहित छवि फ़ाइल नहीं है।) इसके बजाय आपको क्या करना है, एक नया इवेंट हैंडलरछवि ओपेनछवि पर और वहां आदेश लिखें ।

ImageOpened EventHandler

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