- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想使用 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/
我是C#/WPF的初学者,正在尝试使用Xceed PropertyGrid。在他们的网站上,他们显示了一个示例:
对 PropertyGrid 控件进行了一些运行,现在偶然发现了一个奇怪的问题。我在一个类中有一个 Uint32 属性,它是一个位掩码。因此,我决定创建一个带有 32 个按钮的自定义下拉 UserCo
我有一个项目,我们必须以所见即所得的方式在用户控件上表示一些图形对象。还需要编辑每个对象的属性(颜色、位置等)。 alt text http://lh6.ggpht.com/_1TPOP7DzY1E/
我正在使用 PropertyGrid (在 CollectionEditor 中)编辑类的一些属性。这些属性实际上包含在实现 ICustomTypeDescriptor 的类中。 .其中之一使用继承自
我见过的所有 PropertyGrid 示例都允许用户编辑单个对象,PropertyGrid 通过反射扫描该对象。我希望用户能够编辑一个 ini 文件或一本普通的字典,每个键值对一行。这可能吗? 最佳
有没有办法使 ExtJS4 PropertyGrid (Ext.grid.property.Grid) 不可编辑? 没有“可编辑”或“只读”配置选项 AFAICS。 最佳答案 另一种解决方案是添加一个
在 PropertyGrid 表单元素中,当我将属性添加到我的类别时,一些属性以粗体显示。 现在,我知道它表明它们是该类别中的默认值。我的问题是如何使所有属性不加粗? 我知道一种可能的方法是更改
我有: class Foo1 { private string name1; [CategoryAttribute("Category1")] public string Na
我有一个 PropertyGrid,我向其中添加了一个 bool 值数组。数组本身被标记为只读,属性网格可以正确识别它。 但是:如果我在网格中展开数组,所有项目都可以由用户编辑。当然那不是我想要的。如
我一直在研究 PropertyGrids,将它们链接到类,并试图弄清楚如何(如果可能)我可以显示一个类,在 扁平结构(好像它们都在一个类中) 我有几个类,Foo 和 Bar,如下所示: [Serial
在 C# 中,当使用对象具有 Collection 的 PropertyGrid 时,什么决定 DisplayName 旁边的值是否显示该值“(集合)”? 这个值是否有特定的属性? 谢谢 最佳答案 您
我在使用 propertygrid 时遇到了一些问题。即: 当我在 visual studio 设计器中使用 propertygrid 时,行为与在运行时以及调试时不同。 需要注意的几点(这是在设计器
我正在尝试使用 VS2005 (.NET 2.0) 在 C# 中实现对属性网格的拖放支持。 propertygrid 可以处理 dragenter 等事件,但似乎没有办法在拖动事件期间将 gridit
我正在使用 PropertyGrid 来显示通过实现 ICustomTypeDescriptor 公开的自定义属性。 我的对象设置在树结构中,每个属性的值要么在每个对象中设置,要么从父对象继承。在 P
是否可以在属性网格提示中添加可点击的超链接? 我的类(class)有以下内容(作为 SelectedObject 分配给属性网格): [Browsable(true), ReadOnly(false)
是否有一种简单的方法可以查明用户当前是否正在编辑属性网格? 我的用例如下:我每秒更新一次网格数据。如果用户正在编辑一个值,则在调用我的更新时所有输入都会丢失。所以我想做的是仅在用户未编辑内容时更新。
我有 类 PGMain 作为 propertygrid 中的 SelectedObject: [DefaultPropertyAttribute("Basic")] [Seriali
我有一个包含两个属性网格的表单。第一个网格的 SelectedObject 属性设置为包含 item 对象。而第二个设置为item.Test; public MainForm() { Init
我有一个 PropertyGrid。当我输入格式错误的值(即 - 将字符串转换为整数项)时,我收到一条错误消息。如果我单击“确定”,则错误值会一直存在,直到我更改它为止。如果我点击“取消”,原始值又回
在 C# (.Net 2.0) 的一个项目中,我使用了一个 propertygrid。此属性网格显示通过 SOAP 从 PHP 后端检索的对象。某些对象包含字符串属性,其中空字符串的含义与 NULL
我是一名优秀的程序员,十分优秀!