2014-07-04 16 views
5

Özellik kılavuzumun seçili öğesini ayarlamalıyım. Bir dize saklayan bir ibadet alıyorum (bu dize, kullanıcı seçiminde mülkümün hangi özellikte olduğunu söyler). Sorun, bir ızgara öğeleri koleksiyonu bulamıyorum, birini seçebilirim. Ve ayrıca yeni bir GridItem nesnesinin nasıl düzgün bir şekilde oluşturulacağını ve SelectedGridItem özelliğinin nasıl ayarlanacağını bilmiyorum.Özellik kılavuzunun seçili öğesinin nasıl ayarlanacağı

Yardımlarınız için teşekkür ederiz.

Düzenleme:

Onun neredeyse şimdi ÇOK size çok teşekkür Tahnk çalışma.

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

Tek sorun şu ki: Artık Özellik Adı alanını seçiyor. Odağı mülkün giriş alanına ayarlayabilir miyim?

cevap

7

Kılavuzdaki tüm öğeleri numaralandırabilen birkaç PropertyGrid uzantısı aşağıda verilmiştir. Bir öğeyi seçmek için bunu kullanabilirsiniz:

// 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

Çok teşekkür ederim !!! Düzenlememe bir göz atabilir misin? teşekkürler – user3596113

+0

Düzenleme moduna gitmek için SendKeys'i kullanabilirsiniz. Düzenlememe bak. –

+0

Şimdi bir süredir böyle tatlı ve kullanışlı bir uzatma yöntemi görmedim. Sadece harika. Bu şekilde düşünmemiştim. Teşekkürler! – RBT

İlgili konular