2011-11-16 18 views
15

मेरे पास एक क्लास (नियंत्रण) है, जो आईसी कस्टमटाइप डिस्क्रिप्टर को कार्यान्वित करता है, जिसका उपयोग प्रॉपर्टीज्रिड द्वारा प्रॉपर्टीज्रिड द्वारा डिज़ाइन-टाइम और रन-टाइम दोनों पर किया जाता है। मुझे डिज़ाइन-टाइम (मानक नियंत्रण गुण जैसे width, height और इसी तरह) पर अलग-अलग गुणों का खुलासा करने की आवश्यकता है, और रन-टाइम पर, जब मेरे प्रोग्राम में प्रॉपर्टीग्रिड का उपयोग उस नियंत्रण के अन्य गुणों को बदलने के लिए किया जाता है।कैसे पता चलेगा कि नियंत्रण डिज़ाइन-समय पर है या नहीं?

class MyControl : UserControl, ICustomTypeDescriptor 
{ 
    //Some code.. 

    public PropertyDescriptorCollection GetProperties(Attribute[] attributes) 
    { 
     return GetProperties(); 
    } 

    public PropertyDescriptorCollection GetProperties() 
    { 
     //I need to do something like this: 
     if (designTime) 
     { //Expose standart controls properties 
      return TypeDescriptor.GetProperties(this, true); 
     } 
     else 
     { 
      //Forming a custom property descriptor collection 
      PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null); 
      //Some code.. 
      return pdc; 
     } 
    } 
} 

वहाँ सी # में एक डिजाइन समय ध्वज के लिए एक एनालॉग है:

मेरे कोड की तरह है? सशर्त संकलन का उपयोग करना बेहतर हो सकता है?

+1

क्या आप wpf या winform के बारे में बात कर रहे हैं? –

+0

* के संभावित डुप्लिकेट * [कैसे बताएं कि विजुअल स्टूडियो डिजाइनर द्वारा .NET कोड चलाया जा रहा है] (http://stackoverflow.com/questions/73515/how-to-tell-if-net-code-is-being- चलाने-दर-दृश्य-स्टूडियो डिजाइनर) *। –

उत्तर

10

जांचें कि DesignMode सत्य या गलत है। यह एक संपत्ति है जो नियंत्रण बेस वर्ग से संबंधित है।

+2

असल में, यह 'System.ComponentModel.Component' बेस क्लास से संबंधित है। – tafa

8

ध्वज DesignMode होना चाहिए। इसलिए अपने कोड के रूप में

public PropertyDescriptorCollection GetProperties() 
{ 
    //I need to do something like this: 
    if (this.DesignMode) 
    { //Expose standart controls properties 
     return TypeDescriptor.GetProperties(this, true); 
    } 
    else 
    { //Forming a custom property descriptor collection 
     PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null); 
     //Some code.. 
     return pdc;  
    } 
} 

इस प्रकार यहाँ अनुसार MSDN doc है दिखना चाहिए।

3

आधार की DesignMode संपत्ति का उपयोग करें। यह आपको मोड के बारे में बताएगा।

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

  • कोई संबंधित समस्या नहीं^_^