क्या "ब्राउज़ करने योग्य" विशेषता सशर्त बनाने का कोई तरीका है, इसलिए यह लागू करने वाली संपत्ति कभी-कभी गुण पृष्ठ में दिखाई देगी और कभी-कभी नहीं?
धन्यवाद :)सशर्त "ब्राउज़ करने योग्य" विशेषता
उत्तर
जैसी कोई आसान तरीका नहीं है।
आप संभवतः ICustomTypeDescriptor को लागू करके इसे बाहर कर सकते हैं। यहां implementing ICustomTypeDescriptor के बारे में एक अच्छा लेख है।
या आप अपनी कक्षा के साथ अपने ControlDesigner को जोड़ सकते हैं और संपत्ति ग्रिड में देखी गई संपत्तियों को जोड़ने या हटाने के लिए PreFilterProperties विधि को ओवरराइड कर सकते हैं।
आप कस्टम प्रकार-मॉडल प्रदान करके ऐसा कर सकते हैं; पर सबसे सरल स्तर पर, आप ExpandableObjectConverter
से प्राप्त अपने प्रकार के लिए एक कस्टम TypeDescriptor
प्रदान कर सकते हैं, और बस दिए गए प्रॉपर्टी को शामिल/बहिष्कृत करें - लेकिन यह केवल PropertyGrid
के साथ काम करता है - गुण पृष्ठ द्वारा उपयोग किया जाता है। ICustomTypeDescriptor
/TypeDescriptionProvider
का उपयोग करने के लिए एक और जटिल दृष्टिकोण है - यह DataGridView
मैं एक तरह से दृश्य या IntelliSense में छिपा हुआ कुछ सदस्यों की घोषणा और यह सब संकलन समय पर छिपा हो करने के लिए आवश्यक है कि के लिए एक बार बदलने के लिए सक्षम होने के लिए की तलाश में इस बारे में जाना। मैं यह नहीं बता सकता कि क्या आप यही खोज रहे थे या नहीं, लेकिन मुझे अपने प्रश्न का उत्तर मिला ... लगा कि यह साझा करने में चोट नहीं पहुंचा सकता है।
#if IS_VIS
public const System.ComponentModel.EditorBrowsableState isVis =
ComponentModel.EditorBrowsableState.Always;
#else
public const System.ComponentModel.EditorBrowsableState isVis =
ComponentModel.EditorBrowsableState.Never;
#endif
:
मैं एक सशर्त संकलन प्रतीक (परियोजना संपत्तियों के टैब बिल्ड में पाया) IS_VIS (मान हमेशा सही किया जा रहा है, तो आप कुछ सदस्यों को दिखाना चाहते हैं, यदि आपका चाहते हैं उन्हें छिपाने के लिए गलत) और फिर सेट
आप तो विशेषता में संदर्भ isVis चर:
[EditorBrowsable(isVis)]
public string myMethod...
मैं VB में ऐसा किया है और इस जल्दबाजी ग # करने के लिए परिवर्तित कर दिया गया। अगर कुछ सही काम नहीं करता है, तो मुझे बताएं।
मुझे यकीन नहीं है कि यह आपकी स्थिति पर लागू होता है, लेकिन आप नीचे दिए गए फ़ंक्शन को कॉल करके रन-टाइम पर "ब्राउज़ करने योग्य" सजावट समायोजित कर सकते हैं।
/// <summary>
/// Set the Browsable property.
/// NOTE: Be sure to decorate the property with [Browsable(true)]
/// </summary>
/// <param name="PropertyName">Name of the variable</param>
/// <param name="bIsBrowsable">Browsable Value</param>
private void SetBrowsableProperty<T>(string strPropertyName, bool bIsBrowsable)
{
// Get the Descriptor's Properties
PropertyDescriptor theDescriptor = TypeDescriptor.GetProperties(typeof(T))[strPropertyName];
// Get the Descriptor's "Browsable" Attribute
BrowsableAttribute theDescriptorBrowsableAttribute = (BrowsableAttribute)theDescriptor.Attributes[typeof(BrowsableAttribute)];
FieldInfo isBrowsable = theDescriptorBrowsableAttribute.GetType().GetField("Browsable", BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.Instance);
// Set the Descriptor's "Browsable" Attribute
isBrowsable.SetValue(theDescriptorBrowsableAttribute, bIsBrowsable);
}
फिर आप भी जोड़ सकते हैं:
/// <summary>
/// Set the Browsable property.
/// NOTE: Be sure to decorate the property with [Browsable(true)]
/// </summary>
/// <param name="PropertyName">Name of the variable</param>
/// <param name="bIsBrowsable">Browsable Value</param>
private void setBrowsableProperty(string strPropertyName, bool bIsBrowsable)
{
// Get the Descriptor's Properties
PropertyDescriptor theDescriptor = TypeDescriptor.GetProperties(this.GetType())[strPropertyName];
// Get the Descriptor's "Browsable" Attribute
BrowsableAttribute theDescriptorBrowsableAttribute = (BrowsableAttribute)theDescriptor.Attributes[typeof(BrowsableAttribute)];
FieldInfo isBrowsable = theDescriptorBrowsableAttribute.GetType().GetField("Browsable", BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.Instance);
// Set the Descriptor's "Browsable" Attribute
isBrowsable.SetValue(theDescriptorBrowsableAttribute, bIsBrowsable);
}
हाय हटा दिया है। मैं इस तरह कुछ ढूंढ रहा हूँ। जब मैं आपके कोड का उपयोग करता हूं, तो मुझे पहली पंक्ति 'प्रॉपर्टी डिस्क्रिप्टर द डिस्क्रिप्टर = टाइपडिस्क्रिप्टर.गेटप्रॉपर्टीज (यह। गेट टाइप()) [strPropertyName];' 'में पहली बार' nullValue अपवाद मिल रहा है; '।मैं जानना चाहता हूं कि यह फ़ंक्शंस कहां रखना है और यह संपत्ति ग्रिड पर कैसा दिखता है (फ़ंक्शन में कोई संपत्ति ग्रिड ऑब्जेक्ट नहीं देखी गई)। –
आपके समाधान के लिए बहुत बहुत धन्यवाद, मैंने लाइन को 'PropertyDescriptor theDescriptor = TypeDescriptor.GetProperties (vObject.GetType()) [strPropertyName];' में बदल दिया है, जहां vObject ऑब्जेक्ट है जिसे मैं बदल रहा हूं। –
ऊपर और अपवाद गणेश टिप्पणी में उल्लेख किया है से बचने के लिए @ neoikon का जवाब है, यहाँ पर एक सुधार के रूप में एक संस्करण जेनरिक का उपयोग करता है प्रकार प्राप्त करने के लिए है एक संस्करण है कि एक उदाहरण लेता है:
/// <summary>
/// Set the Browsable property.
/// NOTE: Be sure to decorate the property with [Browsable(true)]
/// </summary>
/// <param name="obj">An instance of the object whose property should be modified.</param>
/// <param name="PropertyName">Name of the variable</param>
/// <param name="bIsBrowsable">Browsable Value</param>
private void SetBrowsableProperty<T>(T obj, string strPropertyName, bool bIsBrowsable)
{
SetBrowsableProperty<T>(strPropertyName, bIsBrowsable);
}
उपयोग:
class Foo
{
[Browsable(false)]
public string Bar { get; set; }
}
void Example()
{
SetBrowsableProperty<Foo>("Bar", true);
Foo foo = new Foo();
SetBrowsableProperty(foo, "Bar", false);
}
- 1. क्यों ब्राउज़ करने योग्य विशेषता संपत्ति को बाध्य करने योग्य नहीं बनाती है?
- 2. OnClickListener क्लिक करने योग्य विशेषता
- 3. Magento और कॉन्फ़िगर करने योग्य उत्पाद विशेषता
- 4. @OneToMany साथ एम्बेड करने योग्य इकाई विशेषता
- 5. एमएसटीएस्ट सम्मान [सशर्त()] विशेषता बनाएं?
- 6. हमें [ब्राउज़ करने योग्य (सत्य)] का उपयोग करने की आवश्यकता कब है?
- 7. कक्षा स्तर पर एक सशर्त विशेषता है?
- 8. क्लिक करने योग्य लेबल
- 9. मैं एंड्रॉइड मेनिफेस्ट में ब्राउज़ करने योग्य इरादा कैसे बना सकता हूं?
- 10. स्क्रोल करने योग्य div
- 11. 'फोकस करने योग्य' और 'क्लिक करने योग्य'
- 12. जेड चेकबॉक्स चेक किए गए विशेषता को सशर्त (यदि)
- 13. सशर्त एक समग्र घटक में तत्व की विशेषता प्रस्तुत करना
- 14. ग्रेल्स सशर्त नाली योग्य सत्यापन या निरर्थक विकल्प
- 15. jQuery खींचने योग्य/ड्रॉप करने योग्य: मूल तत्व तक पहुंच
- 16. jQuery सॉर्ट करने योग्य, ड्रॉप करने योग्य और खींचने योग्य एक साथ काम करने के लिए
- 17. सॉर्ट करने योग्य और ड्रॉप करने योग्य, ड्रॉप करने योग्य नहीं है, जब डोम करता है?
- 18. jQuery स्क्रॉल करने योग्य, सॉर्ट करने योग्य, फ़िल्टर करने योग्य तालिका
- 19. सॉर्ट करने योग्य डब्ल्यू/चयन योग्य पाठ
- 20. मार्कर ड्रैग करने योग्य और क्लिक करने योग्य
- 21. बटन ब्राउज़ करना आवश्यक है?
- 22. स्कैला स्रोत कोड ब्राउज़ करने और <- and =>
- 23. बटन ब्राउज़ करने के लिए सीएसएस कैसे लागू करें
- 24. phpmyadmin - ब्राउज़ करने के बजाय संरचना के लिए डिफ़ॉल्ट
- 25. ब्राउज़ करने के लिए कैसे (कोई टेक्स्ट एडिटर) .rst फ़ाइलें?
- 26. स्क्रॉल करने योग्य जेपीनेल
- 27. UILabel स्पर्श करने योग्य
- 28. सॉर्ट करने योग्य यूआई
- 29. कॉन्फ़िगर करने योग्य टेम्पलेट
- 30. डेटा कॉल करने योग्य
ICustomTypeDescriptor.got को लागू करने के लिए लिंक https://msdn.microsoft.com/magazine/msdn-magazine-issues को इंगित करता है मुझे लगता है कि उन्होंने मूल पृष्ठ – gg89