Главная » C#, Компоненты » Скрытие элементов из редактора свойств

0

В нашем компоненте GradientLabei есть одно неудобство: свойство BackCoior, доставшееся нам по наследству от класса Label, противоречит нашим понятиям о градиентной заливке. Было бы хорошо убрать его из редактора свойств, чтобы не вводить пользователей нашего компонента в заблуждение. Добавить этому свойству атрибут Browsabie (false) не получится, т. к. мы не можем исправить уже существующий класс, поэтому мы создадим специальный класс дизайнера, который будет управлять показом свойств.

return prop;

}

)

1

Рис. 6.7. Команды в редакторе свойств, соответствующие пунктам меню

Метод Pre Filter Proper ties о позволяет реализовать фильтрацию элементов, которые мы хотим скрыть из редактора свойств. Параметром этого метода является словарь (dictionary) всех свойств, которые будут передаваться редактору свойств. Этот словарь представляет собой связь между именем свойства и его дескриптором. Достаточно вызвать метод Remove о, и ненужные нам свойства не будут отображаться: properties.Remove ("BackCoior") ;

Полный код класса GradientLabelDesigner показан в листинге 6.8. Теперь, если открыть редактор свойств, то элемента с названием BackColor мы уже не найдем.

Аналогично свойствам, с помощью виртуального метода PreFiiterEvents о можно сделать фильтрацию событий:

protected override void PreFiiterEvents(IDictionary events)

{

base.PreFiiterEvents(events); // здесь удаляем "лишние" события

}

Важно понимать, что методы PreFilterProperties () И PreFiiterEvents () вызываются один раз при построении списка свойств для редактора свойств, поэтому динамическое формирование списка свойств и событий таким способом сделать не получится. Как решить этот вопрос, я буду рассказывать в разд. 8.8.

Листинг 6 8 Класс *toai.®ntbilv«i,.’e,..i’3n«i

using System; using System.Collections; using System.Collections.Generic; using System.Text,-

using System.Windows.Forms.Design;

namespace MyControl (

class GradientLabelDesigner : ControlDesigner

{

protected override void PreFilterProperties(IDictionary properties)

{

base.PreFilterProperties(properties); // Удаляем свойство BackColor из списка свойств properties.Remove("BackColor");

}

)

}

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии