gpt4 book ai didi

c# - PropertyGrid 控件和下拉列表

转载 作者:太空狗 更新时间:2023-10-29 20:24:39 25 4
gpt4 key购买 nike

我想创建一个下拉列表作为属性的编辑器;如果我只有字符串作为下拉列表的条目,这会很好(使用 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);
}
}

结果(嵌入到表单等中)如下所示:

enter image description here

点击一个条目给了我这个:

enter image description here

(抱歉关于德语文本,我不确定是否可以更改它,我的 VS 是英语但我的操作系统不是,错误消息是

  Invalid property value.

The object of type "System.String" cannot be converted to type
"XMLTest.Form1+Bar".

我很确定我可以通过定义将字符串转换回 Bar 对象的向后转换工具来解决这个问题。这将需要不同的 key 才能使其正常工作。有更好的方法吗?为什么嵌入到propertyGrid控件中的comboBox使用字符串(普通的comboBox处理这个没有任何问题)

最重要的是,我可以通过编程更改中间分隔符的位置吗?我还没有找到那个选项。

谢谢。

最佳答案

我将 CanConvertFromConvertFrom 方法添加到您的转换类中:

class BarConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}

public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(barlist);
}

public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}

public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
foreach (Bar b in barlist)
{
if (b.barvalue == (string)value)
{
return b;
}
}
}
return base.ConvertFrom(context, culture, value);
}
}

关于c# - PropertyGrid 控件和下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593364/

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