Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Добавление событий




Реакция на изменение свойства.

Легко было заметить, что изменение значений наших свойств startColor и endColor на виде самой компоненты сказывается совсем не сразу. Точнее оно отображается при любой вынужденной перерисовке компоненты, например, при смене выделенной компоненты. Это происходит потому, что никто не сообщает компоненте о том, что нужно перерисовать саму себя.

Небольшое изменение программного кода решает этот вопрос (листинг 5.3). Теперь при изменении значения свойства мы сразу видим на форме и результат этого изменения, поскольку метод Invalidate () заставляет компоненту перерисовать себя. Но при этом метод Paint () не вызывается напрямую, поскольку это было бы некорректно по отношению к Windows, поскольку заставляет компоненту перерисовываться независимо от того, нужно ли это операционной системе или нет. Метод Invalidate () более "нежен" в этом отношении – компонента будет перерисовываться тогда, когда у операционной системы дойдет до нее время.

Листинг 5.3. Добавление информации о свойствах в классе GradientLabel.

[Category("Gradient"), Description("Цвет начала заливки"), DefaultValue(typeof(Color),

"LightGreen")]

public Color StartColor

{

get{ return startColor; }

set{ startColor = value; OnChangeProperties(); }

}

[Category("Gradient"), Description("Цвет завершения заливки"), DefaultValue(typeof(Color),

"DarkBlue")]

public Color EndColor

{

get{ return endColor; }

set{ endColor = value; OnChangeProperties(); }

}

// Перерисовать себя при изменении свойств

private void OnChangeProperties(){ Invalidate(); }

События позволяют компонентам общаться между собой и программой. Например, если форма хочет каким-то образом обрабатывать нажатие на кнопку, то ей необходимо обрабатывать событие Click этой кнопки. Каждая компонента имеет множество событий, позволяющих реагировать на изменения внутри компоненты или обрабатывать ее реакцию на внешние события (нажатие на клавиши, движения мыши, изменение размера и т.д.). Обычно обработчиками событий являются методы формы, на которой расположена компонента.

Для добавления события к компоненте необходимо:

· Добавить описание переменной onGradientChange типа еvent.

· Описываем событие из метода OnGradientChange() с типом EventHandler и аксессорами add и remove.

· Вызываем событие из метода OnChangeProperties ().

Тем не менее, перед вызовом обработчика события следует проверить, что обработчик onGradientChange не равен null. Аксессоры add и remove можно не указывать, если в этом нет необходимости, но тогда переменную onGradientChange нужно описывать с модификатором public.

В результате новое событие появится в редакторе свойств на вкладке Events (События). Для добавления обработчика достаточно щелкнуть на нем два раза.

// Листинг 5.4. Описание события onGradientChange.

public partial class GradientLabel: Label

{

private event EventHandler onGradientChange;

[Category("Gradient"), Description("Вызывается при изменении свойств заливки")]

public event EventHandler OnGradientChange

{

add{ onGradientChange += value; }

remove{ onGradientChange -= value; }

}

private void OnChangeProperties()

{

Invalidate();

if(onGradientChange!=null){ onGradientChange(this, new EventArgs()); }

}

}

 




Поделиться с друзьями:


Дата добавления: 2015-07-02; Просмотров: 373; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.