gpt4 book ai didi

c# - PropertyGrid --> 从 List 中选择对象
转载 作者:太空宇宙 更新时间:2023-11-03 12:09:55 24 4
gpt4 key购买 nike

有没有办法像 propertyGrid 中的选择组合框一样使用列表?

例如,是否可以有这样一个类:

public class Foo
{
[DisplayName(nameof(SelectedBar)),
Browsable(true)]
public Bar SelectedBar { get; set; } = null;

[Browsable(false)]
public List<Bar> Bars { get; set; } = new List<Bar>() { new Bar("Bar0"), new Bar("Bar1"), new Bar("Bar2") };
}

public class Bar
{
public string Name;

public Bar(string name) { Name = name; }

public override string ToString()
{
return Name;
}
}

在 propertyGrid 中,让我选择“Bar”列表中的对象之一。

最佳答案

好的,我找到了解决方案:

您需要一个带有静态对象列表变量的派生转换器类:

    public class ListStringConverter: StringConverter
{
public static List<object> Objects = new List<object>();

public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}

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

然后将带有转换器的 TypeConverter-Attribute 添加到 selectedObject 变量:

public class Foo
{
public Foo()
{
ObjectListStringConverter.Objects = new List<object>(){ new Bar("Bar0"), new Bar("Bar1"), new Bar("Bar2") };
}

[DisplayName(nameof(SelectedBar)),
Browsable(true),
TypeConverter(typeof(ObjectListStringConverter))]
public Bar SelectedBar { get; set; } = null;
}

public class Bar
{
public string Name;

public Bar(string name) { Name = name; }

public override string ToString()
{
return Name;
}
}

在某些时候,您需要用您希望包含在列表中的对象填充转换器类的静态对象列表变量,就像我在上面的 Foo-Constructor 中所做的那样。

编辑:该列表将显示您添加到列表中的每个对象的 ToString() 方法返回值。

关于c# - PropertyGrid --> 从 List<object> 中选择对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52877799/

24 4 0