如何设置属性网格的选定项目

我需要设置我的属性网格的选定项目。 我得到一个eventargs,它存储一个字符串(这个字符串告诉我用户想要选择的属性网格中的属性)。 问题是我找不到网格项的集合,我可以从中选择一个。 而且我也不知道如何正确创建一个新的GridItem对象并设置SelectedGridItem属性。

 GridItem gridItem = ???; detailsPropertyGrid.SelectedGridItem = gridItem; 

谢谢您的帮助。

编辑:

它几乎正在工作,现在非常了解你。

 GridItem gi = this.detailsPropertyGrid.EnumerateAllItems().First((item) => item.PropertyDescriptor != null && item.PropertyDescriptor.Name == colName); this.detailsPropertyGrid.SelectedGridItem = gi; this.detailsPropertyGrid.Select(); 

唯一的问题是:现在它选择Property Name字段。 我可以将焦点设置为属性的输入字段吗?

这里有几个PropertyGrid扩展,可以枚举网格中的所有项目。 这是你如何使用它来选择一个项目:

  // get GridItem for a property named "Test" GridItem gi = propertyGrid1.EnumerateAllItems().First((item) => item.PropertyDescriptor != null && item.PropertyDescriptor.Name == "Test"); // select it propertyGrid1.Focus(); gi.Select(); // enter edit mode SendKeys.SendWait("{F4}"); ... public static class PropertyGridExtensions { public static IEnumerable EnumerateAllItems(this PropertyGrid grid) { if (grid == null) yield break; // get to root item GridItem start = grid.SelectedGridItem; while (start.Parent != null) { start = start.Parent; } foreach (GridItem item in start.EnumerateAllItems()) { yield return item; } } public static IEnumerable EnumerateAllItems(this GridItem item) { if (item == null) yield break; yield return item; foreach (GridItem child in item.GridItems) { foreach (GridItem gc in child.EnumerateAllItems()) { yield return gc; } } } }