Как сделать урезанную PropertyGrid - PullRequest
2 голосов
/ 21 февраля 2011

Я создаю приложение, в котором я показываю данные в древовидном представлении, и когда пользователь дважды щелкает элемент в древовидном представлении, узел, на который он нажал, заменяется редактируемой версией узла. Способ редактирования различных узлов сильно различается, поэтому использование встроенной возможности изменения текста узла недопустимо. Вместо этого мне нужно использовать сетку свойств и определить атрибуты [Editor].

Единственная проблема состоит в том, что в сетке свойств отображаются два столбца: один с именем свойства, а другой с его значением. Мне нужно только показать столбец значений (часть, которую пользователь может редактировать). Есть ли способ удалить первый столбец или использовать функциональность сетки свойств в другом, настраиваемом классе, который показывает только один столбец?

1 Ответ

2 голосов
/ 01 марта 2011

Это невозможно без взлома сетки свойств.Вот код, который может изменить ширину столбца метки:

public static void SetLabelColumnWidth(PropertyGrid grid, int width)
{
    if (grid == null)
        throw new ArgumentNullException("grid");

    // get the grid view
    Control view = (Control)grid.GetType().GetField("gridView", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(grid);

    // set label width
    FieldInfo fi = view.GetType().GetField("labelWidth", BindingFlags.Instance | BindingFlags.NonPublic);
    fi.SetValue(view, width);

    // refresh
    view.Invalidate();
}

public static void ResetLabelColumnWidth(PropertyGrid grid)
{
    SetLabelColumnWidth(grid, -1);
}

Используйте его так же, чтобы удалить столбец метки:

    SetLabelColumnWidth(propertyGrid1, 0);

Функция сброса восстанавливает столбец метки.

Конечно, это взлом, поэтому он может не сработать в будущем.Также есть проблемы:

  • Курсор v-сплиттера отображается, когда мышь перемещается в левую сторону сетки, и пользователь может выбрать его и сбросить столбец метки, если щелкнет.
  • Некоторые действия сетки могут также восстановить столбец метки (например, с помощью панели инструментов сетки свойств).

Надеюсь, это поможет!

...