2016-07-15 4 views
2

Я использую Winform's PropertyGrid в моем проекте, все работает отлично, но порядок вкладок.Как использовать вкладку для перемещения между свойствами свойства winform grid

Я хочу перейти к следующему имуществу, когда я ударил Tab, но infact, выбор переходит из сетки свойств в следующий элемент управления. Я не могу понять, как это сделать?

Благодаря

+0

Единственное, что мешает мне опубликовать решение, - это способ получить следующий видимый элемент (из-за пределов текущей группы элементов). Все остальное кажется прекрасным с моей стороны. – user3185569

+0

Существует коммерческое решение, которое хорошо управляет клавишей Tab. Это вариант для вас? –

+0

спасибо Nic, но я не думаю, что это вариант сейчас. – Muds

ответ

3

Мы должны выкопать во внутренние части PropertyGrid, то мы можем изменить по умолчанию Tab поведение контроля. В начале мы должны создать производный PropertyGrid и переопределить его метод ProcessTabKey.

В этом методе сначала найдите внутренний PropertyGridView элемент управления, который находится по индексу 2 в коллекции Controls. Затем, используя Reflection, получите свое поле allGridEntries, которое представляет собой коллекцию, содержащую все элементы GridItem.

После поиска всех элементов сетки найдите в коллекции индекс SelectedGridItem и проверьте, не является ли он последним элементом, получите следующий элемент по индексу и выберите его, используя метод Select.

using System.Collections; 
using System.Linq; 
using System.Windows.Forms; 
public class ExPropertyGrid : PropertyGrid 
{ 
    protected override bool ProcessTabKey(bool forward) 
    { 
     var grid = this.Controls[2]; 
     var field = grid.GetType().GetField("allGridEntries", 
      System.Reflection.BindingFlags.NonPublic | 
      System.Reflection.BindingFlags.Instance); 
     var entries = (field.GetValue(grid) as IEnumerable).Cast<GridItem>().ToList(); 
     var index = entries.IndexOf(this.SelectedGridItem); 

     if (forward && index < entries.Count - 1) 
     { 
      var next = entries[index + 1]; 
      next.Select(); 
      return true; 
     } 
     return base.ProcessTabKey(forward); 
    } 
} 
+0

Спасибо за ваш ответ Реза, но почему-то ProcessTabKey не попал, когда я нажимаю Tab. – Muds

+0

Возможно, вы совершили ошибку. Вы должны добавить этот класс в свой проект и поместить его экземпляр в свою форму. Я тестировал его, и я уверен, что он работает правильно, поэтому дайте мне знать, если у вас возникнут проблемы с ответом :) –

+0

yea Reza это то, что я сделал, может быть, вкладка обрабатывается в другом месте и не позволяет processTab выполнять? Я не знаю, каков порядок обработки вкладки, но что-то останавливает вкладку, чтобы не протаивать – Muds

 Смежные вопросы

  • Нет связанных вопросов^_^