PropertyGrid ... उपयोगकर्ताओं के लिए आईडी केवल उनमें से कई को छोड़ना पसंद है। लेकिन अब मैं सब देखते हैं, और जब डॉक या कर्सर और इस तरह ... आशा है कि यह अभी के लिए स्पष्ट है ... इस विशेषताPropertyGrid: बेस क्लास गुण छुपाएं, कैसे?
उत्तर
उपयोग की तरह कुछ देखने वाले उपयोगकर्ताओं उलझन में होगा:
[Browsable(false)]
public bool AProperty {...}
विरासत में मिला के लिए गुण:
:[Browsable(false)]
public override bool AProperty {...}
एक और विचार (आप सभी आधार वर्ग के सदस्यों को छिपाने की कोशिश कर रहे हैं के बाद से)
और उसके बाद अपनी संपत्ति ग्रिड के लिए:
MyCtrl tx = new MyCtrl();
pg1.SelectedObject = tx.ExtraProperties;
नीचे की ओर यह आपकी पहुँच
tx.ExtraProperties.PropertyA = "foo";
करने से
tx.PropertyA = "foo";
उन गुणों का स्तर बदल जाता MyCtrl
गुण को छुपाने के लिए है, का उपयोग करें संपत्ति पर [Browsable(False)]
विशेषता।
[Browsable(false)]
public bool AProperty { get; set;}
को छुपाने के लिए विरासत में मिला proeprties, आप आधार ओवरराइड और ब्राउज़ करने योग्य विशेषता लागू करने की जरूरत है।
[Browsable(false)]
public override string InheritedProperty { get; set;}
नोट: आप virtual
या new
कीवर्ड परिस्थितियों के आधार पर जोड़ने की जरूरत हो सकती है।
ControlDesigner
का उपयोग करने के लिए एक बेहतर तरीका होगा। डिजाइनर के पास PreFilterProperties
नामक एक ओवरराइड है जिसका उपयोग PropertyGrid
द्वारा निकाले गए संग्रह में अतिरिक्त विशेषताओं को जोड़ने के लिए किया जा सकता है।
Designer(typeof(MyControlDesigner))]
public class MyControl : TextBox
{
// ...
}
public class MyControlDesigner : ...
{
// ...
protected override void PreFilterProperties(
IDictionary properties)
{
base.PreFilterProperties (properties);
// add the names of proeprties you wish to hide
string[] propertiesToHide =
{"MyProperty", "ErrorMessage"};
foreach(string propname in propertiesToHide)
{
prop =
(PropertyDescriptor)properties[propname];
if(prop!=null)
{
AttributeCollection runtimeAttributes =
prop.Attributes;
// make a copy of the original attributes
// but make room for one extra attribute
Attribute[] attrs =
new Attribute[runtimeAttributes.Count + 1];
runtimeAttributes.CopyTo(attrs, 0);
attrs[runtimeAttributes.Count] =
new BrowsableAttribute(false);
prop =
TypeDescriptor.CreateProperty(this.GetType(),
propname, prop.PropertyType,attrs);
properties[propname] = prop;
}
}
}
}
आप proeprties आप propertiesToHide
जिसमें अधिक स्पष्ट अलग होने के लिए अनुमति देता है के लिए छिपाने के लिए इच्छा के नाम जोड़ सकते हैं।
क्रेडिट जहां कारण: http://www.codeproject.com/KB/webforms/HidingProperties.aspx#
यह सही है .. धन्यवाद। का क्या अर्थ है ("<{0}: MyControl runat =" server "> {0}: MyControl>")? क्या यह एएसपी से है? मैं WinForms का उपयोग कर रहा हूँ ... –
हां। आप Winforms के लिए उस हिस्से को अनदेखा कर सकते हैं। मैं अपना जवाब अपडेट करूंगा। – Mrchief
मैंने कोशिश की, लेकिन इससे मदद नहीं मिली। क्या यह RUNTIME के दौरान काम करता है? –
- 1. Winforms PropertyGrid - गुण संपादन योग्य नहीं हैं
- 2. छुपाएं गुण/टूलबॉक्स फलक?
- 3. बेस क्लास
- 4. बेस क्लास
- 5. बेस क्लास
- 6. बेस क्लास
- 7. बेस क्लास
- 8. PropertyGrid
- 9. बेस क्लास
- 10. बेस क्लास
- 11. बेस क्लास
- 12. बेस क्लास
- 13. स्कैला: सार बेस क्लास
- 14. बेस क्लास बनाम यूटिलिटी क्लास
- 15. एक PropertyGrid
- 16. सार बेस या हेल्पर क्लास
- 17. (संभवतः सार) बेस क्लास
- 18. सी ++ बेस क्लास इंस्टेंस
- 19. सी ++ बेस क्लास समस्या
- 20. टेम्पलेट बेस क्लास
- 21. सार बेस क्लास
- 22. सी # बेस क्लास विधि
- 23. एक्सएमएल बेस क्लास
- 24. एक्सएमएल सारणी बेस क्लास
- 25. सी # बेस क्लास
- 26. पैरामीटर प्रकार बेस क्लास
- 27. बेस कंट्रोलर क्लास
- 28. कुछ बेस क्लास
- 29. बेस टेस्ट क्लास
- 30. बेस क्लास के शुरुआती
यह के बारे में वर्ग विरासत में मिला नहीं है, मैं आधार वर्ग के गुणों को छिपाना चाहते हैं। उस मामले में: टेक्स्टबॉक्स प्रोप। बेस क्लास प्रोप कैसे छिपाना है? यही तो प्रश्न है। –
हां, यह काम करता है, मुझे पता है। आप मेरे प्रश्न में यह बयान देखेंगे: "उस मामले में कौन सी तकनीक लागू है? छिपाना? बेस क्लास का प्रत्येक प्रोप?" ... मैं बस सोच रहा हूं कि मैं गुणों को फ़िल्टर कर सकता हूं ... लेकिन लगता है कि रनटाइम के दौरान यह नहीं है संभव है, क्योंकि सभी गुण संकलित असेंबली के लिए स्थिर हैं। –
लार्स, कृपया मेरा उत्तर पढ़ें। यही वही था जो मुझे चाहिए ... –