如何在PropertyGrid c#中定制PropertyInfo[]对象

本文关键字:PropertyInfo 对象 PropertyGrid | 更新日期: 2023-09-27 17:49:29

我有一个动态加载的类,我不知道它包含多少(或什么类型)属性。我想加载它的所有属性到一个PropertyGrid的方式,它会显示,因为它显示一个常规类。

例如

,如果这是我的类:

class TestPropertyObject
{
    [Category("Names")]
    [Description("Enter your name")]
    public string Name { get; set; }
    [Category("Numbers")]
    [Description("Enter your number")]
    public int Number { get; set; }
}

和我使用反射来生成一个对象并获得它的属性:

PropertyInfo[] info = obj.GetType().GetProperties()  

如何在PropertyGrid中显示属性?
这篇文章我已经准备好多次了http://www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert但我似乎就是不能让它工作。

请给我一些指导,我将非常感激。

谢谢!

如何在PropertyGrid c#中定制PropertyInfo[]对象

这里有一个解决方案,您只需要类的实例。

        var OptionsPropertyGrid = new PropertyGrid();
        OptionsPropertyGrid.Size = new Size(300, 250);
        this.Controls.Add(OptionsPropertyGrid);
        TestPropertyObject appset = new TestPropertyObject();
        OptionsPropertyGrid.SelectedObject = appset;

这个例子假设你的类的属性是用类别/描述来装饰的。如果我误解了,请告诉我。

或者使用动态对象

        var OptionsPropertyGrid = new PropertyGrid();
        OptionsPropertyGrid.Size = new Size(300, 250);
        this.Controls.Add(OptionsPropertyGrid);
        this.Text = "Options Dialog";
        string classname = "WindowsFormsApplication1.TestPropertyObject";
        var type1 = Type.GetType(classname);
        object obj = Activator.CreateInstance(type1);
        OptionsPropertyGrid.SelectedObject = obj;

确保您可以获得类的名称空间