Урок 3. Добавляем событие

Автор: admin | 14 Июнь 2008 – 14:47 -


Урок 3. Добавляем событие

У любого компонента могут присутствовать свойства (это мы уже посмотрели, как делать), методы (это будет на следующих уроках) и события (которыми мы как раз сейчас и займемся).

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

Итак, сейчас мы добавим событие WrongColor, которое будет возникать, когда пользователь установит цвет надписи, совпадающей с цветом фона. Надпись будет не видна, и в этом случае и возникнет добавленное нами событие.

Приступаем к коду. Вот что вам надо добавить в класс компонента:

    ...
    // Объявление делегата.
    public delegate void WrongColorDelegate();
    // Объявление события на основе делегата.
    public event WrongColorDelegate WrongColor;
    // Обявление свойства.
    public System.Drawing.Color LabelColor {
    {
        get
        {
            ...
        }
        set{
            // Если существует контейнер для элемента
            // и если цвет label'а у компонента равен
            // цвету фона контейнера.
            if(Parent!=null && value == Parent.BackColor)
            {
                // Вызов события.
                WrongColor();
            }
            else
            {
                label1.ForeColor = value;
            }
        }
    }
    ...

Код должен быть ясен из комментариев – объявляем делагат, затем событие на основе этого делегата, потом изменяем код свойства LabelColor – а именно делаем проверку, не совпадает ли цвет контейнера с цветом label’а у компонена. Если совпадают, то цвет label’а не меняем, а просто возбуждаем событие.

Компилируем проект.

Теперь смотрим, как событие можно использовать в тестовом проекте. Для добавления обработчика для нашего события выделяем компонент на форме, после чего в окне Properties нажимаем на кнопку Events (кнопка с желтой молнией), после чего ищем в списке событий наше WrongColor.

Двойным щелчком добавляем обработчик, в котором, например, можно просто показать messagebox:

private void userControl11_WrongColor()
{
    MessageBox.Show("Wrong сolor!");
}

Для испытаний нам еще надо где-то установить неправильное значение свойства LabelColor для нашего компонента. Например, в обаботчике некоторой кнопки:

private void button1_Click(object sender, System.EventArgs e)
{
    userControl11.LabelColor = BackColor;
}

Запускаем программу, нажимаем на кнопку – появляется messagebox, который мы написали в обработчике события.


Tags: , , , , , , , ,
Находится в Компоненты C# | No Comments »

Ответить

Вы должны быть в системе, дабы комментировать.


C# — язык программирования, сочетающий объектно-ориентированные и аспектно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio. ПУЛЬС ПЛАНЕТЫ ЛОПУХИ НА РАКЕТНОЙ БАЗЕ РУДОЛЬФ КОЛЧАНОВ,СОБ. КОРР. 'ТРУДА'. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков С++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).