Пользовательский редактор для логического свойства в PropertyGrid (C #) - PullRequest
2 голосов
/ 19 октября 2010

Я хочу назначить пользовательский редактор для свойства boolean в PropertyGrid.Я использую стандартную сетку свойств (из пространства имен System.Windows.Forms).Пользовательские редакторы можно назначать свойствам с помощью класса UITypeEditor.Однако, насколько я вижу, невозможно использовать его для свойства boolean.

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

Properties.Item.Add("My Custom Editor", "", false, "Properties with custom UITypeEditor", "The component accept custom UITypeEditor.", true);
Properties.Item[Properties.Item.Count - 1].CustomEditor = new MyEditor();

Пока все хорошо, появляется пользовательский редактор (с кнопкой в ​​сетке).Однако, когда я меняю тип на boolean, устанавливая значение по умолчанию на false (см. Ниже), кнопка для открытия пользовательского редактора не появляется.Вместо этого появляется выпадающее меню с true / false.

Properties.Item.Add("My Custom Editor", false, false, "Properties with custom UITypeEditor", "The component accept custom UITypeEditor.", true);
Properties.Item[Properties.Item.Count - 1].CustomEditor = new MyEditor();

У кого-нибудь есть решение для этого?

Спасибо вперед!

С уважением,Питер

1 Ответ

4 голосов
/ 23 октября 2010

Microsoft PropertyGrid проверяет этот флаг, чтобы определить, отображает ли он стрелку раскрывающегося списка (flag == true) или модальную кнопку (flag == false):

bool flag = gridEntryFromRow.NeedsDropDownButton | gridEntryFromRow.Enumerable;

Первая часть имеет значение true, еслиСтиль UITypeEditor имеет значение DropDown, а вторая часть имеет значение true, если присоединенный метод GetContainer TypeConverter возвращает значение true.

Вы можете проверить все это в PropertyGridView.SelectRow в Reflector.

Если вы можете присоединить пользовательскийTypeConverter для вашего логического (я бы получил его из BooleanConverter), чей метод GetStandardValuesSupported переопределяется для возврата false, тогда вы получите вашу модальную кнопку.Конечно, вы теряете стандартные значения (например, двойной щелчок не приводит к циклическому изменению значений), это компромисс.Я уже давно выявил эту проблему, и поэтому в своей собственной PropertyGrid я не такой строгий и включу модальный редактор, даже если стандартные значения определены, пока я присоединяю атрибут ForceEditor к свойству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...