Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置属性网格的选定项_C#_Propertygrid - Fatal编程技术网

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

C# 如何设置属性网格的选定项,c#,propertygrid,C#,Propertygrid,我需要设置属性网格的选定项。我得到了一个eventargs,它存储了一个字符串(这个字符串告诉我用户要选择propertygrid中的哪个属性)。 问题是我找不到网格项的集合,我可以从中选择一个。而且我也不知道如何正确地创建一个新的GridItem对象并设置SelectedGridItem属性 GridItem gridItem = ???; detailsPropertyGrid.SelectedGridItem = gridItem; 谢谢你的帮助 编辑: 它现在几乎可以工作了,我很想你

我需要设置属性网格的选定项。我得到了一个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();

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

这里有几个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;
              }
          }
      }
  }
//获取名为“Test”的属性的GridItem
GridItem gi=propertyGrid1.EnumerateAlliItems().First((项)=>
item.PropertyDescriptor!=null&&
item.PropertyDescriptor.Name==“测试”);
//选择它
propertyGrid1.Focus();
gi.Select();
//进入编辑模式
SendKeys.SendWait(“{F4}”);
...
公共静态类PropertyGridExtensions
{
公共静态IEnumerable EnumerateAllItems(此PropertyGrid网格)
{
if(grid==null)
屈服断裂;
//获取根项目
GridItem start=grid.SelectedGridItem;
while(start.Parent!=null)
{
start=start.Parent;
}
foreach(start.EnumerateAllItems()中的GridItem项)
{
收益回报项目;
}
}
公共静态IEnumerable EnumerateAllItems(此GridItem)
{
如果(项==null)
屈服断裂;
收益回报项目;
foreach(item.GridItems中的GridItem子项)
{
foreach(子.EnumerateAllItems()中的GridItem gc)
{
收益率;
}
}
}
}

您可以使用SendKeys进入编辑模式。查看我的编辑。已经有一段时间没有看到这样一个甜蜜和有用的扩展方法了。简直太棒了。不可能是这样想的。谢谢此处选定的griditem背景色显示为灰色。我们可以将其更改为默认的浅蓝色或删除babk颜色吗???@野餐4U-Winforms的属性网格是一个非常硬编码的东西,它有点遵循Windows设置,但并不总是这样,所以可能不是,但你应该问另一个问题。这对我来说很有吸引力。我不得不用“SendKeys.Send”而不是“SendKeys.SendWait”。