2009-10-06 16 views
13

क्या यह व्युत्पन्न नियंत्रण में गुणों को छिपाने का तरीका है?कस्टम नियंत्रण में अवांछित गुण छुपाएं

public class NewButton : Button

...

[Browsable (false)] 
public new ContentAlignment TextAlign { get; set; } 

इसके अलावा इस डिजाइनर में गुण विंडो में संपत्ति को छुपाता है लेकिन कैसे मैं भी कोड में संपत्ति छिपा कर सकते हैं?

उत्तर

15
कोड से

, निकटतम आप इसे इसे छिपाने, और शायद यह सीधे कॉल करने के लिए एक दर्द बनाने के लिए कर सकते हैं - ध्यान दें कि छिपा हुआ यह प्रतिदेय है, और इस में से कोई भी एक डाली अतीत काम करेगा:

// about the closest you can do, but not really an answer 
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
[Obsolete("just cast me to avoid all this hiding...", true)] 
public new ContentAlignment TextAlign { get; set; } 

व्यक्तिगत रूप से, मैं परेशान नहीं होता। यह मजबूत नहीं है (बस कास्ट)।

+0

धन्यवाद मार्क। कास्ट करके आप इस मामले में पैरेंट क्लास को कास्टिंग कर सकते हैं, बटन? –

1

शायद आप जो करना चाहते हैं वह कंटेनर नियंत्रण या उपयोगकर्ता नियंत्रण से प्राप्त होता है, उस नियंत्रण में एक बटन जोड़ें और बस उस बटन इंटरफ़ेस के उन हिस्सों को बेनकाब करें जिन्हें आप रखना चाहते हैं।

1

नहीं, आप उन्हें डिज़ाइनर से दिखा सकते हैं (दिखाए गए अनुसार) लेकिन आप उन्हें वास्तव में फॉर्म कोड छुपा नहीं सकते क्योंकि यह प्रतिस्थापन सिद्धांत का उल्लंघन करेगा। यह पूछा गया है & ने कई बार जवाब दिया, उदाहरण के लिए this SO question देखें।

2

आप विशेषता का उपयोग कर सकते हैं, documented here के रूप में।

[EditorBrowsable(EditorBrowsableState.Never)] 
public bool HideMeInIntellisense 
{ 
    // ... 

प्रलेखन से:

... दृश्य स्टूडियो में IntelliSense इंजन निर्धारित करने के लिए एक संपत्ति या विधि दिखाया जाए या नहीं इस विशेषता का उपयोग करता।

हालांकि, उपयोगकर्ता इसे वीएस सेटिंग्स में ओवरराइड कर सकते हैं। ReSharper में एक सेटिंग भी है जो नियंत्रित करती है कि क्या इस विशेषता को अपने IntelliSense में सम्मानित किया गया है।

उत्सुकता से, आप उपयोगकर्ताओं से कुछ छिपाना क्यों चाहते हैं? सिर्फ इसलिए कि ऊपर वर्णित तरीके से एक सदस्य छिपा हुआ है इसका मतलब यह नहीं है कि आप इसे कोड में उपयोग नहीं कर सकते हैं और इसे सफलतापूर्वक संकलित कर सकते हैं। यह सिर्फ सदस्य की खोज को रोकता है।

+0

छुपाकर मेरा मतलब है कि इसे पूरी तरह से "निकालें" ताकि आप इसे एक्सेस न कर सकें। ऐसा इसलिए है क्योंकि बटन के कुछ गुण मेरे नियंत्रण पर लागू नहीं होते हैं। –

+0

क्या आपने बटन क्लास के माता-पिता को उप-वर्गीकृत करने और आपको जो चाहिए उसे पुन: कार्यान्वित करने पर विचार किया है? मैं एक नया सवाल पूछने पर विचार करता हूं जो आपको कारण बताता है कि आपको बटन के व्यवहार को बदलने की जरूरत क्यों है और इसे प्राप्त करने के विभिन्न तरीकों की तलाश है। –

0

आप इसे निजी क्यों नहीं बनाते? यह गारंटी देता है कि पूर्वजों को यह नहीं दिखाई देगा। संपादित करें: इस मामले में आपको आधार से एक नई कक्षा का उत्तराधिकारी होना होगा और अपनी नई कक्षा का उपयोग करना होगा, जो अब संपत्ति को छुपाता है।

public class MyTextBox: TextBox 
{ 
... 
     private new ContentAlignment TextAlign 
     { 
      get { return base.ContentAlignment; } 
      set { base.ContentAlignment = value; } 
     } 
} 
+0

क्योंकि यह संभव हो सकता है या नहीं भी हो सकता है। कभी-कभी आप जीयूआई से कुछ छिपाना चाहते हैं। –

+0

मैंने अभी यह कोशिश की - संपत्ति अभी भी डिजाइनर में दिखाई देती है। – JPNotADragon

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