我想创建一个下拉列表作为属性的编辑器;如果我只有字符串作为下拉列表的条目,这将正常工作(使用 StringConverter)。但是,当我尝试使用对象列表而不是字符串时,这将不起作用(但是请注意它对普通组合框的工作原理!)这是我的代码:
public static List<Bar> barlist;
public Form1()
{
InitializeComponent();
barlist = new List<Bar>();
for (int i = 1; i < 10; i++)
{
Bar bar = new Bar();
bar.barvalue = "BarObject " + i;
barlist.Add(bar);
comboBox1.Items.Add(bar);
}
Foo foo = new Foo();
foo.bar = new Bar();
propertyGrid1.SelectedObject = foo;
}
public class Foo
{
Bar mybar;
[TypeConverter(typeof(BarConverter))]
public Bar bar
{
get { return mybar; }
set { mybar = value; }
}
}
public class Bar
{
public String barvalue;
public override String ToString()
{
return barvalue;
}
}
class BarConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(barlist);
}
}
结果(嵌入到表单等中)如下所示:
单击一个条目给了我这个:
(对不起德语文本,我不确定是否可以更改,我的 VS 是英文但我的操作系统不是,错误消息是
Invalid property value.
The object of type "System.String" cannot be converted to type
"XMLTest.Form1+Bar".
我很确定我可以通过定义将字符串转换回 Bar 对象的向后转换工具来解决此问题。这将需要不同的密钥才能使其正常工作。有没有更好的方法来做到这一点?为什么嵌入到 propertyGrid 控件中的组合框使用字符串(普通的组合框对此没有任何问题)
最重要的是,我可以以编程方式更改中间分隔符的位置吗?我还没有找到那个选项。
谢谢你。