Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Через 12 дней :

Международный Женский день


BB-ссылка
Навигация | Поиск по FAQ | <- Назад | Вперед -> | Обновить
58.03 Как добавить пользовательскую закладку в окно свойств, когда оно отображает свойства моего объекта?

Ответ

 DrPass Ср, 11-Окт-2006 23:52 Просмотров: 672
Есть небольшой пример, где показано как это сделать... вот тут: PropTab.zip. После того, как вы его загрузите и разархивируете, соберите проект. Обе сборки - и с элементом управления, и небольшую управляющую. После этого добавьте элемент управления на панель инструментов, используя 'Customise toolbox...'.
Затем перетащите экземпляр этой компоненты на форму управляющего подпроекта. Как только вы выделите эту компонету, в окне свойств появится закладка с картинкой "Т", как показано на рисунке:


Ниже приводятся необходимые для этого шаги. Перед тем, как следовать этим шагам, не поленитесь посмотреть на пример. Это здорово поможет разобраться в приведенном материале.

Операции с компонентой

Убедитесь, что у вас есть компонента с двумя наборами свойств, один из которых вы хотите увидеть на главной странице свойств, а второй - соответственно отобразить на второй странице.

Отметьте свойства, которые нужно отобразать на первой вкладке, атрибутом BrowsableAttribute, установленным в true.
Отметьте свойства для второй вкладки атрибутом BrowsableAttribute, установленным в false. Создайте еще один атрибут. Назовите его как угодно (или как мы - CustomTabDisplayAttribute), и дайте ему простое булево свойство. Установите его равным true.

Прочие операции

Унаследуйте класс от System.Windows.Forms.PropertyGridInternal.PropertiesTab. Вам потребуется перегрузить несколько методов. Самый важный из них - GetProperties. Мы перегрузим GetProperties как показано ниже, чтобы использовать наш CustomTabDisplayAttribute как фильтр вместо BrowsableAttribute, используемого PropertyGrid по умолчанию.



c#:
  1. public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object component, Attribute[] attrs)
  2.           {
  3.                return TypeDescriptor.GetProperties(component, new Attribute[]
  4.                     {new BrowsableAttribute(false), new CustomTabDisplayAttribute(true)});
  5.            }
  6.  
  7.  


Создайте ресурс-битмап с именем, совпадающим с именем класса-потомка. Размер битмапа должен быть 16х16 точек.
Краткое пояснение: пример показывает пользовательскую компоненту, которая отображает собственную закладку для некоторых свойств. Эти своства должны быть отмечены некоторым атрибутом-фильтром. Вот для этого мы и завели CustomTabDisplayAttribute. Остальные свойства отображаются на стандартной странице свойств, и не требуют каких-либо манипуляций над собой.

Чтобы глубже разобраться в том, как это работает, см. темы про конвертеры типов и дескрипторы типов в этом FAQ
Последний раз редактировалось: DrPass (Ср, 11-Окт-2006 23:57), всего редактировалось 1 раз(а)

Показать/скрыть комментарии (0)

хостинг от .masterhost 
Rambler's Top100