मैंने फ़ॉर्म और उपयोगकर्ता नियंत्रणों की DesignMode प्रॉपर्टी के बारे में कई पोस्ट और प्रश्न देखे हैं। विचार यह है कि आप यह जांचना चाहते हैं कि नियंत्रण डिज़ाइन मोड में है (उदा। नियंत्रण विजुअल स्टूडियो डिज़ाइनर में दिखाया गया है), और कोड से बचें जो केवल रन-टाइम में ही चलाया जा सकता है। मैंने जो समस्या देखी है, उनमें कई समस्याएं हैं - और मेरी असफल स्मृति ने मुझे हाल ही में इसका खुलासा किया - यह है कि DesignMode प्रॉपर्टी कन्स्ट्रक्टर में काम नहीं करती है, और नेस्टेड नियंत्रणों के लिए काम नहीं करती है। हालांकि, यह आपके नियंत्रण या फ़ॉर्म के लिए लोड इवेंट हैंडलर में बेहद अच्छी तरह से काम करता है !!DesignMode प्रॉपर्टी बनाम लाइसेंस मैनेजर का उपयोग करना। उपयोगकर्ता मोड
जब आप इसके बारे में सोचते हैं, तो फॉर्म या उपयोगकर्ता नियंत्रण के रचनाकारों में कोड केवल उस राज्य से निपटना चाहिए जिसके लिए फ़ॉर्म को लोड करने की आवश्यकता नहीं है। यूआई ऑब्जेक्ट्स प्रारंभिकरण से निपटने वाला कोड नियंत्रण के लिए लोड इवेंट हैंडलर में स्थित होना चाहिए। और उस समारोह में, DesignMode संपत्ति काम करता है। डिजाइनर उस समय अपने उचित मूल्य का उपयोग करेगा।
सिद्धांत रूप में, InitializeComponent() विधि को कॉल किया गया है, लेकिन वास्तव में, जब आप डिज़ाइन व्यू में नियंत्रण दिखाते हैं, तो डिज़ाइनर केवल उस कार्य को पार करता है, यह इसे नहीं चलाता है। हालांकि, डिजाइनर नेस्टेड नियंत्रण के निर्माता को चलाता है। यदि आपको पूरी तरह से कन्स्ट्रक्टर में प्रारंभिक कोड डालना होगा, तो System.ComponentModel.LicenseManager क्लास का उपयोग करें, इसमें एक स्थिर संपत्ति है जिसे UsageMode कहा जाता है जो DesignTime या RunTime के मान लेता है। आप उस संपत्ति को अपने नियंत्रण के निर्माता में पूरी तरह से भरोसा कर सकते हैं - लेकिन केवल निर्माता में!
मैं इस समय काम कर रहा हूं कि ऐप में उस छोटी सी सूक्ष्मता को भूल गया था। इस मुद्दे को हल करने के लिए, मैं इस पैटर्न का पालन कर रहा हूं कि सभी नियंत्रण और रूप जिन्हें अतिरिक्त प्रारंभिकता की आवश्यकता है, को लोड ईवेंट के लिए एक हैंडलर लागू करना होगा। वहां, DesignMode प्रॉपर्टी ठीक काम करती है, और मुझे डिजाइनर में अपने उपयोगकर्ता नियंत्रण और फॉर्म खोलने में कभी परेशानी नहीं होती है।
यदि मेरे पास कक्षा पदानुक्रम है, तो मैं कभी-कभी उस ईवेंट हैंडलर वर्चुअल संरक्षित करता हूं, और जब मैं सबक्लास को अतिरिक्त प्रारंभिकता की आवश्यकता होती है तो मैं इसे केवल ओवरराइड करता हूं।
मैं कर रहा हूँ सोच रहा है, हालांकि, अगर वहाँ बेहतर तरीकों सारे हैं, या अगर कोई इस पैटर्न के बारे में कुछ बदबूदार (अन्य है कि एक लोड ईवेंट हैंडलर कई बार लागू करने के लिए हो रही है?)
बहुत उपयोगी, धन्यवाद। –