如何枚举PropertyGrid项?

Yur*_*riy 8 .net c# propertygrid winforms

我有一个PropertyGrid分配给它的一些对象.

var prpGrid = new PropertyGrid();
prp.SelectedObject = myObject;
Run Code Online (Sandbox Code Playgroud)

我想得到所有网格项,我可以得到selectedGridItem属性:

var selectedProperty = prpGrid.SelectedGridItem;
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?

Sim*_*ier 5

这是一段代码,它将检索属性网格的所有GridItem对象:

public static GridItemCollection GetAllGridEntries(PropertyGrid grid)
{
    if (grid == null)
        throw new ArgumentNullException("grid");

    object view = grid.GetType().GetField("gridView", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(grid);
    return (GridItemCollection)view.GetType().InvokeMember("GetAllGridEntries", BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, view, null);
}
Run Code Online (Sandbox Code Playgroud)

当然,由于这是使用Property Grid的未记录的私有字段,因此不保证将来可以使用:-)

拥有所有GridItem后,可以使用GridItem.GridItemType属性过滤它们.