2008-10-02 15 views
9

.net में, मैं एक विरासत नियंत्रण होता है:एक विरासत .net नियंत्रण पर एक संपत्ति की DefaultValue बदलने

public CustomComboBox : ComboBox 

मैं बस एक और मूल्य के लिए, DropDownStyle संपत्ति का डिफ़ॉल्ट मान को बदलना चाहते हैं (ComboBoxStyle। DropDownList) बेस क्लास (कॉम्बोबॉक्स स्टाइल.ड्रॉपडाउन) में निर्दिष्ट डिफ़ॉल्ट के अलावा।

एक सोच सकते हैं कि आप बस निर्माता जोड़ सकते हैं:

public CustomComboBox() 
{ 
    this.DropDownStyle = ComboBoxStyle.DropDownList; 
} 

हालांकि, इस पद्धति दृश्य स्टूडियो डिजाइनर भ्रमित करेगा। विजुअल स्टूडियो में कस्टम कंट्रोल डिज़ाइन करते समय, यदि आप ड्रॉपडाउन स्टाइल के लिए कॉम्बोबॉक्स स्टाइल.ड्रॉपडाउन चुनते हैं तो यह सोचता है कि आपके द्वारा चुनी गई संपत्ति अभी भी डिफ़ॉल्ट मान है (बेस कॉम्बोबॉक्स क्लास में [DevaultValue()] से, इसलिए यह नहीं है DesignC.cs फ़ाइल में एक कस्टमComboBox.DropDownStyle = ComboBoxStyle.DropDown लाइन जोड़ें। और भ्रमित रूप से पर्याप्त, आप पाते हैं कि स्क्रीन एक बार दौड़ने के इरादे से व्यवहार नहीं करती है।

वैसे आप DropDownStyle संपत्ति के बाद से यह आभासी नहीं है ओवरराइड कर सकते हैं नहीं है, लेकिन तुम कर सकते हो:

[DefaultValue(typeof(ComboBoxStyle), "DropDownList")] 
public new ComboBoxStyle DropDownStyle 
{ 
     set { base.DropDownStyle = value; } 
     get { return base.DropDownStyle; } 
} 

लेकिन फिर आप 'नई' घोषणाओं का उपयोग कर की बारीकियों से मुसीबत में पड़ जाएगा। मैंने कोशिश की है और ऐसा लगता है कि दृश्य स्टूडियो डिजाइनर इस दृष्टिकोण से उलझन में नहीं आता है और कॉम्बोबॉक्स स्टाइल। ड्रोपडाउन (बेस क्लास के लिए डिफ़ॉल्ट) को मजबूर करता है।

क्या ऐसा करने का कोई और तरीका है? वर्बोज़ प्रश्न के लिए खेद है, विस्तार से वर्णन करना मुश्किल है।

उत्तर

9

यह लगता है कि यह काम करता है:

public class CustomComboBox : ComboBox 
{ 
    public CustomComboBox() 
    { 
     base.DropDownStyle = ComboBoxStyle.DropDownList; 
    } 

    [DefaultValue(ComboBoxStyle.DropDownList)] 
    public new ComboBoxStyle DropDownStyle 
    { 
     set { base.DropDownStyle = value; Invalidate(); } 
     get { return base.DropDownStyle;} 
    } 
} 
+5

यह एक शर्म की बात है वहाँ सिर्फ एक विशेषता जोड़ने के लिए संपत्ति reimplement बिना इस लक्ष्य को हासिल करने के लिए एक तरह से नहीं है। – Pondidum

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