gpt4 book ai didi

c# - 在 propertygrid 中使用字典

转载 作者:可可西里 更新时间:2023-11-01 08:18:58 24 4
gpt4 key购买 nike

我想使用 propertygrid 编辑键值(字符串,字符串)项目列表。当我使用 Dictionary<string,string>作为类型,propertygrid 将显示一个 GUI,但它似乎没有“启用”,即。我无法添加任何项目。

是否支持 Dictionary 对象,或者是否有任何其他对象可以用来解决这个问题?

最佳答案

我已经按照this code做了过去:

class DictionaryPropertyGridAdapter : ICustomTypeDescriptor
{
IDictionary _dictionary;

public DictionaryPropertyGridAdapter(IDictionary d)
{
_dictionary = d;
}

public string GetComponentName()
{
return TypeDescriptor.GetComponentName(this, true);
}

public EventDescriptor GetDefaultEvent()
{
return TypeDescriptor.GetDefaultEvent(this, true);
}

public string GetClassName()
{
return TypeDescriptor.GetClassName(this, true);
}

public EventDescriptorCollection GetEvents(Attribute[] attributes)
{
return TypeDescriptor.GetEvents(this, attributes, true);
}

EventDescriptorCollection System.ComponentModel.ICustomTypeDescriptor.GetEvents()
{
return TypeDescriptor.GetEvents(this, true);
}

public TypeConverter GetConverter()
{
return TypeDescriptor.GetConverter(this, true);
}

public object GetPropertyOwner(PropertyDescriptor pd)
{
return _dictionary;
}

public AttributeCollection GetAttributes()
{
return TypeDescriptor.GetAttributes(this, true);
}

public object GetEditor(Type editorBaseType)
{
return TypeDescriptor.GetEditor(this, editorBaseType, true);
}

public PropertyDescriptor GetDefaultProperty()
{
return null;
}

PropertyDescriptorCollection
System.ComponentModel.ICustomTypeDescriptor.GetProperties()
{
return ((ICustomTypeDescriptor)this).GetProperties(new Attribute[0]);
}

public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
ArrayList properties = new ArrayList();
foreach (DictionaryEntry e in _dictionary)
{
properties.Add(new DictionaryPropertyDescriptor(_dictionary, e.Key));
}

PropertyDescriptor[] props =
(PropertyDescriptor[])properties.ToArray(typeof(PropertyDescriptor));

return new PropertyDescriptorCollection(props);
}
}

class DictionaryPropertyDescriptor : PropertyDescriptor
{
IDictionary _dictionary;
object _key;

internal DictionaryPropertyDescriptor(IDictionary d, object key)
: base(key.ToString(), null)
{
_dictionary = d;
_key = key;
}

public override Type PropertyType
{
get { return _dictionary[_key].GetType(); }
}

public override void SetValue(object component, object value)
{
_dictionary[_key] = value;
}

public override object GetValue(object component)
{
return _dictionary[_key];
}

public override bool IsReadOnly
{
get { return false; }
}

public override Type ComponentType
{
get { return null; }
}

public override bool CanResetValue(object component)
{
return false;
}

public override void ResetValue(object component)
{
}

public override bool ShouldSerializeValue(object component)
{
return false;
}
}

private void Form1_Load(object sender, System.EventArgs e)
{
IDictionary d = new Hashtable();
d["Hello"] = "World";
d["Meaning"] = 42;
d["Shade"] = Color.ForestGreen;

propertyGrid1.SelectedObject = new DictionaryPropertyGridAdapter(d);
}

对我们来说效果很好。

关于c# - 在 propertygrid 中使用字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com