progs.biz  
Начало>VB.NET>Основы>Урок 6
C#
VB.NET
Visual C++.NET
ASP.NET
Visual C++ 6
WinAPI
C/C++
Delphi
C++ Builder
Java
SQL
PHP
DirectX
Visual Basic 6.0
Ассемблер
Интернет
Сист. прогр-ние
Pocket PC
Обзор книг
Обзор программ

Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Джон Коннелл. Разработка элементов управления Microsoft .NET на Microsoft Visual Basic .NET
Заказать на Озоне



Яндекс-цитирования

Основы VB.NET
Урок 6. События классов в VB.NET

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

Сейчас мы напишем наш класс Dice ("Игральная кость"). В классе будет единственный метод GetRandom, который будет возвращать случайное число от 1 до 6. Кроме того, в классе будет событие MaxNumber. Наш класс будет генерировать это событие в случае выпадения 6 очков (т. е. если метод GetRandom возвратит максимально возможное значение 6).

Вот полностью текст кода для нашего класса:

Class Dice
    Private r As New Random()
    Public Event MaxNumber()
    Public Function GetRandom()
        Dim k As Integer
        k = r.Next Mod 6 + 1
        If k = 6 Then
            RaiseEvent MaxNumber()
        End If
        Return k
    End Function
End Class

Обсудим код этого класса. Во-первых, в нем мы объявили событие MaxNumber строкой

    Public Event MaxNumber()

Событие мы, естественно, объявили как Public. У нашего события параметров нет, но могли бы и быть (в этом случае пишем их в круглых скобках через запятую).

Для того, чтобы наше событие произошло, мы используем оператор RaiseEvent:

            RaiseEvent MaxNumber()

Как вы видите, синтаксис оператора прост - после ключевого слова RaiseEvent мы просто пишем имя события (при необходимости с параметрами). По коду видно, что наше событие возникает тогда, когда на нашем кубике выпадет 6.

Добавляем теперь модуль для испытания нашего класса. Вот он:

Module Test
    Dim WithEvents d As Dice
    Public Sub Main()
        d = New Dice()
        'Бросаем кость
        Console.WriteLine(d.GetRandom())
    End Sub
    'Добавляем обработчик
    Sub MaxListener() Handles d.MaxNumber
        Console.WriteLine("Получено максимальное значение")
    End Sub
End Module

Обратите тут внимание на ряд моментов. Во-первых, мы объявляем экземпляр нашего класса с ключевым словом WithEvents. Во-вторых, мы должны в нашей программе добавить обработчик для этого события. В этом обработчике мы можем написать все, что угодно - это дело уже нашей программы, а не класса. Класс только извещает программу, что в нем произошло некоторое событие, а программа уже сама определяет, что делать при наступлении события. Это мы делаем в строках

    Sub MaxListener() Handles d.MaxNumber
        Console.WriteLine("Получено максимальное значение")
    End Sub

Как вы видите, обработчик представляет из себя процедуру, в которую мы внесли некоторое добавление - а именно указали, что она есть обработчик для события MaxNumber экземпляра d нашего класса. Это мы делаем посредством ключевого слова Handles:

Sub MaxListener() Handles d.MaxNumber

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

Добавить заготовку для обработчика события можно следующим способом. В левом combobox'е окна кода выбираем имя переменной класс (d в нашем случае), а в правом - имя события (MaxNumber в нашем случае):

Добавление обработчика

Ну и полученную заготовку вставляем нужный нам код.

Запускаем программу. Чаще всего результатом программы будет просто число (которые выпадет на нашем кубике), но если нам повезет и на кубике выпадет 6, то кроме шестерки на экране покажеться надпись "Получено максимальное значение":

Максимальное значение
Рассылки нашего сайта на Subscribe.Ru
Visual C++, MFC
C# и .NET
VB.NET
ASP.NET new!
Win API
C/C++
Delphi
Java
HTML, PHP, mySQL, WEB-дизайн
Flash MX
C++ Builder
Ассемблер
SQL Server
DirectX
Обзор книг
Обзор программ
Новости сайта progs.biz


 
 
Копирование любых материалов сайта без разрешения авторов и владельцев сайта запрещено.
© 2002-2008 сайт progs.biz
© 2002-2008 Игорь Алексеев