如何在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但我似乎就是不能让它工作。
请给我一些指导,我将非常感激。
谢谢!
这里有一个解决方案,您只需要类的实例。
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;
确保您可以获得类的名称空间