在PropertyGrid中显示对象描述

本文关键字:对象 描述 显示 PropertyGrid | 更新日期: 2023-09-27 18:04:26

我有一些对象,我希望在用户选择它们时在属性网格中显示它们。我知道属性描述可以在每个对象类中设置,但是我要求同一对象的不同实例之间的描述是不同的。

是否有一种方法,我可以设置整个对象的描述,在运行时显示,无论在属性网格中选择什么属性?

例如,如果我有以下类

public class Person
{
    public String Name { get; set; }
    public String Age { get; set; }
    public Person(String n, int a)
    {
        this.Name = n;
        this.age = a;
    }
    public Person()
    {
    }
}

,我以以下方式创建了一个Person对象

Person Frank = new Person(Frank, 22);

并将该对象显示在属性网格中,如下所示

propertyGrid1.SelectedObject = Frank;

我希望能够为整个对象提供描述,而不是Person类的名称和年龄属性。而且,因为我希望描述特别适用于Frank对象,所以我不仅希望能够根据选择的对象类型设置描述,还希望能够根据该对象的特定实例设置描述。这可能吗?

在PropertyGrid中显示对象描述

PropertyGrid只显示属性的描述,而不显示对象。也就是说,您可以在对象上实现ICustomTypeDescriptor并覆盖GetProperties方法。在那里你可以注入一个自定义的DescriptionAttribute。

关于这个界面的更长的教程可以在这里和这里找到。

CodeNaked为正确答案。PropertyGrid只显示当前选择的属性的描述,而不是显示整个实例,这是有意义的。这样做有什么好处?如果确实需要根据目标实例显示消息,为什么不在网格的顶部或底部创建一个标签呢?它的内容可以基于您的自定义属性或您自己的DescriptionProvider…