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

本文关键字:网格 属性 何设置 设置 | 更新日期: 2023-09-27 18:11:21

我需要设置我的属性网格的选定项。我得到一个eventargs,它存储了一个字符串(这个字符串告诉我在我的propertygrid中用户想要选择的属性)。问题是我找不到一个网格项目的集合,我可以选择一个。我也不知道如何正确地创建一个新的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<GridItem> 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<GridItem> 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;
              }
          }
      }
  }