2010-07-27 5 views
6

में अन्य वस्तु/struct के लिए डिफ़ॉल्ट संपत्ति पता है कैसे एक डिजाइनर एक संपत्ति का डिफ़ॉल्ट मान बता जब यह DefaultValue() द्वारा समर्थित प्रकारों में से एक नहीं है करता है? उदाहरण के लिए, Padding, या Fontकैसे एक सी # डिजाइनर एक पैडिंग या सी #

आम तौर पर, जब आप एक Windows Forms नियंत्रण का उपयोग करें, डिफ़ॉल्ट मान गुण विंडो में एक सामान्य फ़ॉन्ट में हो जाएगा, और बदल (गैर डिफ़ॉल्ट) मान बोल्ड में होगा। जैसे

Image of properties windows with non-default values in bold

इस नमूने में, ShowAddress का डिफ़ॉल्ट मान false है और ShowName का डिफ़ॉल्ट मान true है। इस आशय निम्नलिखित साथ हासिल की है:

[DefaultValue(false)] 
public bool ShowAddress { 
    get { return mShowAddress; } 
    set { 
    mShowAddress = value; 
    Invalidate(); 
    } 
} 

[DefaultValue(true)] 
public bool ShowName { ... } 

हालांकि, जब मैं Padding के लिए कुछ करने की कोशिश की, मैं बुरी तरह विफल रहा है:

[DefaultValue(new Padding(2))] 
public Padding LabelPadding { ... } 

कौन सा कोर्स के संकलन नहीं होंगे।

मैं यह कैसे पृथ्वी पर क्या करेंगे?

उत्तर

8

इस प्रयास करें:

private static Padding DefaultLabelPadding = new Padding(2); 
private internalLabelPadding = DefaultLabelPadding; 
public Padding LabelPadding { get { return internalLabelPadding; } set { internalLabelPadding = value; LayoutNow(); } } 

// next comes the magic 
bool ShouldSerializeLabelPadding() { return LabelPadding != DefaultLabelPadding; } 

संपत्ति ब्राउज़र प्रत्येक प्रॉपर्टी XYZ के लिए ShouldSerializeXYZ नाम के एक समारोह के लिए लग रहा है। जब भी ShouldSerializeXYZ झूठा रिटर्न देता है, तो यह कोड पीढ़ी के दौरान कुछ भी नहीं लिखता है।

संपादित करें: प्रलेखन:

+0

यह के लिए काम नहीं लगता है मुझे। विज़ुअल सी # 2008 का उपयोग करना। कोड डालने के बाद, यह फ़ॉर्म डिज़ाइनर को संपत्ति को डिफ़ॉल्ट रूप से सेट करने के बाद, और कभी भी प्रॉपर्टी विंडो में बोल्डिंग को नहीं ले गया। –

+0

यह भी विजुअल C# में काम नहीं करता 2010 –

+0

क्षमा करें, मैं नामकरण गलत था। मैंने दस्तावेज के लिए एक लिंक भी जोड़ा। –

18

इस प्रयास करें:

[DefaultValue(typeof(Padding), "2, 2, 2, 2")] 
public Padding LabelPadding 
{ 
    get { return _labelPadding; } 
    set { _labelPadding = value; } 
} 
संबंधित मुद्दे