2012-10-12 30 views
7

कस्टम नियंत्रण के लिए डिफ़ॉल्ट गुण कैसे सेट करें, यानी जब उन्हें पहले डिज़ाइनर में फ़ॉर्म पर खींचा जाता है?सी # WinForms कस्टम नियंत्रण डिफ़ॉल्ट गुण

यहां या Google के माध्यम से कोई जवाब नहीं मिल रहा है; मुझे लगता है कि मूल्यों को कैसे रोकें।

चौड़ाई & का उपयोग उदाहरण के रूप में ऊँचाई, अगर मैं उन्हें कन्स्ट्रक्टर में सेट करता हूं तो डिजाइनर खोले जाने पर हर बार नियंत्रण में लागू होता है। मैं उन्हें डिफ़ॉल्ट रूप से कैसे सेट करूं जो उपयोगकर्ता को गुणों को बदलने के बाद कभी भी लागू नहीं होता है?

+0

क्या आप बेस क्लास गुणों को लागू करने का उदाहरण दे सकते हैं? –

+0

क्षमाप्रार्थी - यह '[डिफ़ॉल्ट वैल्यू (कुछ वैल्यू)]' है। उदाहरण के साथ एमएसडीएन का एक लिंक यहां दिया गया है: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute%28v=vs.90%29.aspx – Bridge

+0

मुझे लगता है कि DefaultValue विशेषता आप क्या है जरुरत। विजुअल स्टूडियो आईडीई डिज़ाइनर फ़ाइल में विशेषता में निर्दिष्ट डिफ़ॉल्ट मान डाल देगा। यदि उपयोगकर्ता किसी अन्य मान पर डिफ़ॉल्ट मान बदल देगा, तो विजुअल स्टूडियो आईडीई डिज़ाइनर फ़ाइल को नए मान के साथ अपडेट करेगा। यह पिछले मान को फिर से लोड करने से रोक देगा जब नियंत्रण फिर से खोला जाएगा क्योंकि डिफ़ॉल्ट मान पहले ही अधिलेखित हो चुका है। – jags

उत्तर

-1

कन्स्ट्रक्टर में, अपनी प्रॉपर्टी के मान सेट करें जिन्हें आप कैनवास पर खींचते समय दिखाना चाहते हैं। या यदि वे बेस नियंत्रण के गुणों में निर्मित हैं तो उन्हें डिज़ाइनर कोड क्लास में सेट करें।

+1

कन्स्ट्रक्टर में गुणों को सेट करने से उन्हें डिजाइनर खोले जाने पर हर बार लागू किया जाता है, प्रभावी रूप से इसका अर्थ है कि उन्हें सेट नहीं किया जा सकता है। –

-1

नीचे दिए गए फॉर्म को आप मूल्य प्रदर्शित करने की अनुमति देंगे, इसके बाद आप इसे वांछित सेट कर सकते हैं।

private int widthLength = 5; 

public int Width {  

    get { return widthLength ; } 
    set { widthLength = value; 
} 
+1

इसका उपयोग करते समय, डिज़ाइनर में फ़ॉर्म पर नियंत्रण खींचने पर डिफ़ॉल्ट गुण लागू नहीं होते हैं। मुझे एक कंपाइलर चेतावनी भी मिलती है कि यह विरासत में सदस्य को छुपाता है; चेतावनी द्वारा निर्देशित 'नया' जोड़ना व्यवहार को नहीं बदलता है। –

5

DefaultValue विशेषता का उपयोग करने का प्रयास करें।

private int height; 

[DefaultValue(50)] 
public int Height 
{ 
    get 
    { 
     return height; 
    } 
    set 
    { 
     height=value; 
    } 
} 
+1

यह ऊंचाई के लिए बेस क्लास प्रॉपर्टी के रूप में काम नहीं करता है, इसके द्वारा ओवरराइड नहीं किया जाता है। –

2

क्या गुण है कि मैं ओवरराइड नहीं कर सकते new ऑपरेटर उपयोग कर रहा है के लिए मेरे लिए काम किया। उदाहरण के लिए, MultiSelectListView नियंत्रण पर संपत्ति। मुझे MultiSelect डिफ़ॉल्ट रूप से false पर जाना है, लेकिन मैं अभी भी इसे बदलना चाहता हूं।

मैं सिर्फ निर्माता में false के लिए सेट, या InitializeComponent में, समस्या (मुझे लगता है कि) उस डिफ़ॉल्ट मान अभी भी true है, इसलिए यदि मैं डिजाइनर, डिजाइनर सूचनाओं में true को मान सेट है कि true डिफ़ॉल्ट है, और इसलिए यह स्पष्ट रूप से इसे डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से सेट करने के बजाय संपत्ति को सेट नहीं करता है। लेकिन फिर मूल्य false होने के बजाय समाप्त होता है, क्योंकि यह कन्स्ट्रक्टर में सेट है।

/// <summary>Custom ListView.</summary> 
public sealed partial class DetailsListView : ListView 
{ 
    ... 

    [DefaultValue(false)] 
    public new bool MultiSelect { 
     get { return base.MultiSelect; } 
     set { base.MultiSelect = value; } 
    } 

यह नियंत्रण अभी भी एक कार्य MultiSelect संपत्ति है कि false बजाय true, और संपत्ति को चूक अभी भी चालू किए जाने पर किया जा सकता है की अनुमति देता है:

इस मुद्दे मैं निम्नलिखित कोड का इस्तेमाल किया चारों ओर पाने के लिए नया नियंत्रण

संपादित करें: मुझे अमूर्त रूपों का उपयोग करने के साथ एक समस्या का सामना करना पड़ा। मैं एक ठोस कार्यान्वयन के साथ अमूर्त रूप कक्षाओं का उपयोग कर रहा हूं, जिसे मैं डिजाइनर का उपयोग करने की आवश्यकता होने पर स्विच करता हूं। मैंने पाया कि जब मैंने कक्षा को स्विच किया था कि मैं विरासत में था कि मेरे कस्टम नियंत्रण पर गुण पुराने डिफ़ॉल्ट पर रीसेट हो जाएंगे। ऐसा लगता है कि कस्टम नियंत्रण के निर्माता में अपने डिफ़ॉल्ट पर गुण सेट करके इस व्यवहार को सही किया गया है।