आप रनटाइम पर किसी भी तरह से प्रॉपर्टीग्रिड को कैसे संशोधित करते हैं? मैं गुणों को जोड़ने और हटाने और "गतिशील प्रकार" जोड़ने में सक्षम होना चाहता हूं, जिसका अर्थ है कि इसका एक प्रकार है जिसके परिणामस्वरूप टाइपकॉन्टर का उपयोग करके प्रॉपर्टीग्रिड में रनटाइम उत्पन्न ड्रॉपडाउन होता है।रनटाइम पर PropertyGrid को संशोधित करने के लिए (संपत्ति/गतिशील प्रकार/enums जोड़ें/हटाएं)
मैं वास्तव में उन दोनों चीजों को करने में सक्षम हूं (गुण जोड़ें/हटाएं और गतिशील प्रकार जोड़ें) लेकिन केवल एक ही समय में अलग नहीं है।
रनटाइम पर गुण जोड़ने और निकालने के लिए समर्थन को लागू करने के लिए मैंने this codeproject article का उपयोग किया और विभिन्न प्रकारों (केवल स्ट्रिंग्स नहीं) का समर्थन करने के लिए कोड को थोड़ा सा संशोधित किया।
private System.Windows.Forms.PropertyGrid propertyGrid1;
private CustomClass myProperties = new CustomClass();
public Form1()
{
InitializeComponent();
myProperties.Add(new CustomProperty("Name", "Sven", typeof(string), false, true));
myProperties.Add(new CustomProperty("MyBool", "True", typeof(bool), false, true));
myProperties.Add(new CustomProperty("CaptionPosition", "Top", typeof(CaptionPosition), false, true));
myProperties.Add(new CustomProperty("Custom", "", typeof(StatesList), false, true)); //<-- doesn't work
}
/// <summary>
/// CustomClass (Which is binding to property grid)
/// </summary>
public class CustomClass: CollectionBase,ICustomTypeDescriptor
{
/// <summary>
/// Add CustomProperty to Collectionbase List
/// </summary>
/// <param name="Value"></param>
public void Add(CustomProperty Value)
{
base.List.Add(Value);
}
/// <summary>
/// Remove item from List
/// </summary>
/// <param name="Name"></param>
public void Remove(string Name)
{
foreach(CustomProperty prop in base.List)
{
if(prop.Name == Name)
{
base.List.Remove(prop);
return;
}
}
}
आदि ...
public enum CaptionPosition
{
Top,
Left
}
मेरे पूर्ण समाधान here डाउनलोड किया जा सकता।
जब मैं स्ट्रिंग्स, बूल या एनम्स जोड़ता हूं तो यह ठीक काम करता है, लेकिन जब मैं "डायनेमिक टाइप" जैसे स्टेटसलिस्ट जोड़ने की कोशिश करता हूं तो यह काम नहीं करता है। क्या किसी को पता है कि इसे हल करने में मेरी मदद क्यों कर सकती है?
public class StatesList : System.ComponentModel.StringConverter
{
private string[] _States = { "Alabama", "Alaska", "Arizona", "Arkansas" };
public override System.ComponentModel.TypeConverter.StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(_States);
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return true;
}
}
एक TypeConverter का उपयोग करने का विधि ठीक काम करता है जब आप संपत्ति रनटाइम पर बिना किसी समस्या के उदाहरण के लिए this code काम करता है जोड़ने के लिए, कोशिश नहीं है, लेकिन मैं दोनों ऐसा करने में सक्षम होना चाहता हूँ।
कृपया my project पर एक नज़र डालें। धन्यवाद!
आप कर रहे हैं स्वागत :) –
मैं जानता हूँ कि पद बहुत पुराना है, लेकिन मैं एक छोटा सवाल है। मैं वास्तव में अपने आवेदन के भीतर आपका कोड उपयोगकर्ता लेकिन कस्टम combobox काम नहीं करता है। संपत्ति का नाम गहरा हुआ है और कोई विकल्प उपलब्ध नहीं है। कोई विचार, मैं इसे ठीक करने के लिए क्या कर सकता हूं? अग्रिम धन्यवाद, मार्टिन – user653427
@ user653427, के बाद से इस तरह के एक पुराने सवाल है, यह भी है कि यह एक नया प्रश्न पोस्ट और इस पृष्ठ पर यह लिंक करने के लायक हो सकता है। आप अधिक जानकारी देने और इस तरह से अधिक लोगों तक पहुंचने में सक्षम होंगे। –