gpt4 book ai didi

.net - 如何控制winforms属性网格中ExpandableObject属性的顺序?

转载 作者:行者123 更新时间:2023-12-02 08:56:18 25 4
gpt4 key购买 nike

我有类似的 class :

[TypeConverterAttribute(typeof(ExpandableObjectConverter))]
public class Inner
{
public string Before{get;set}
public string After(get;set}
}

public class Outer
{
public Inner Inner {get;set}
}

myPropertygrid.SelectedObject = new Outer();

我希望“内部”的属性显示为“之前”,“之后”,属性网格似乎按字母顺序排列它们,因此将它们显示为“之后”,“之前”

最佳答案

我不喜欢这种解决方案,但它似乎有效:

创建一个“PropertyDescriptorCollection”的子类,并覆盖所有“Sort”方法,仅返回“this”。因此,每当属性网格调用sort更改属性顺序时,都不会发生任何事情。

创建具有“GetProperties”方法的“ExpandableObjectConverter”子类,以返回“NoneSortingPropertyDescriptorCollection”的实例,该实例具有正确顺序的属性。

使用[TypeConverterAttribute(typeof(MyExpandableObjectConverter))]可以使用ExpandableObjectConverter的子类。

public class NoneSortingPropertyDescriptorCollection : PropertyDescriptorCollection
{
public NoneSortingPropertyDescriptorCollection(PropertyDescriptor[] propertyDescriptors)
: base(propertyDescriptors)
{
}

public override PropertyDescriptorCollection Sort()
{
return this;
}
public override PropertyDescriptorCollection Sort(string[] names)
{
return this;
}

public override PropertyDescriptorCollection Sort(string[] names, System.Collections.IComparer comparer)
{
return this;
}
public override PropertyDescriptorCollection Sort(System.Collections.IComparer comparer)
{
return this;
}
}

public class MyExpandableObjectConverter : ExpandableObjectConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
{
PropertyDescriptorCollection d = base.GetProperties(context, value, attributes);

List<PropertyDescriptor> props = new List<PropertyDescriptor>();
props.Add(d.Find("Before", false));
props.Add(d.Find("After", false));

NoneSortingPropertyDescriptorCollection m = new NoneSortingPropertyDescriptorCollection(props.ToArray());
return m;
}
}

[TypeConverterAttribute(typeof(MyExpandableObjectConverter))]
public class Inner
{
public string Before{get;set}
public string After(get;set}
}

关于.net - 如何控制winforms属性网格中ExpandableObject属性的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624111/

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