2014-07-04 29 views
5

Potrzebuję ustawić wybrany element siatki moich właściwości. Otrzymuję eventargs, który przechowuje ciąg znaków (ten ciąg informuje mnie, jaką właściwość w mojej siatce właściwości chce wybrać użytkownik). Problem polega na tym, że nie mogę znaleźć kolekcji elementów siatki, mogę wybrać jedną z nich. A także nie wiem jak poprawnie utworzyć nowy obiekt GridItem i ustawić właściwość SelectedGridItem.Jak ustawić zaznaczony element siatki własności

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

dziękuję za pomoc.

Edit:

Jej prawie pracy teraz tahnk bardzo.

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

Jedyny problem to: Teraz jest to zaznaczenie pola Nazwa właściwości. Czy mogę ustawić fokus na pole wejściowe właściwości?

Odpowiedz

7

Oto kilka rozszerzeń PropertyGrid, które mogą wyliczyć wszystkie elementy w siatce. W ten sposób można go użyć do wyboru jednego elementu:

// 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; 
       } 
      } 
     } 
    } 
+0

Dziękuję bardzo !!! Czy możesz przejrzeć moją edycję? dzięki – user3596113

+0

Możesz użyć przycisków SendKeys, aby przejść do trybu edycji. Zobacz moją edycję. –

+0

Od jakiegoś czasu nie widziałem tak słodkiej i przydatnej metody rozszerzenia. Poprostu super. Nie mogłem pomyśleć w ten sposób. Dzięki! – RBT

Powiązane problemy