Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом пошаговом руководстве показано, как объявлять и вызывать события для класса с именем Widget. После выполнения действий может потребоваться прочитать раздел компаньона, пошаговое руководство. Обработка событий, в котором показано, как использовать события из Widget объектов для предоставления сведений о состоянии в приложении.
Класс мини-приложения
Предположим, что у вас есть Widget класс. Класс Widget имеет метод, который может занять много времени для выполнения, и вы хотите, чтобы приложение могло разместить какой-то индикатор завершения.
Конечно, вы могли бы сделать так, чтобы объект Widget показывал диалоговое окно "Процент завершения", но тогда вам пришлось бы использовать это диалоговое окно в каждом проекте, в котором вы использовали класс Widget. Хороший принцип проектирования объектов заключается в том, чтобы приложение, использующее объект, обрабатывало пользовательский интерфейс, если только цель объекта не заключается в управлении формой или диалоговым окном.
Цель Widget заключается в выполнении других задач, поэтому лучше добавить событие PercentDone и разрешить процедуре, которая вызывает методы Widget, обрабатывать это событие и отображать обновления состояния. Событие PercentDone также может предоставить механизм отмены задачи.
Создание примера кода для этого раздела
Откройте новый проект приложения Windows Visual Basic и создайте форму с именем
Form1.Добавьте две кнопки и метку
Form1.Назовите объекты, как показано в следующей таблице.
Объект Недвижимость Настройки Button1TextЗапуск задачи Button2TextОтменить Label(Name),TextlblПроцентВыполнено, 0 В меню "Проект" выберите "Добавить класс ", чтобы добавить класс с именем
Widget.vbв проект.
Объявление события для класса Widget
Используйте ключевое
Eventслово для объявления события вWidgetклассе. Обратите внимание, что событие может иметьByValиByRefаргументы, как событиеWidgetPercentDoneдемонстрирует.Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Когда вызывающий PercentDone объект получает событие, Percent аргумент содержит процент завершенной задачи. Аргумент Cancel можно установить в True для отмены метода, вызвавшего событие.
Замечание
Аргументы событий можно объявлять так же, как и аргументы процедур, используя следующие исключения: события не могут иметь Optional или ParamArray аргументы, а события не имеют возвращаемых значений.
Событие PercentDone вызывается методом LongTaskWidget класса.
LongTask принимает два аргумента: время, которое метод притворяется работающим, и минимальный интервал времени, прежде чем LongTask активирует событие PercentDone.
Инициация события PercentDone
Чтобы упростить доступ к свойству
Timer, используемому этим классом, добавьте операторImportsв начало раздела объявлений модуля класса, над операторомClass Widget.Imports Microsoft.VisualBasic.DateAndTimeДобавьте в класс
Widgetследующий код.Public Sub LongTask(ByVal Duration As Single, ByVal MinimumInterval As Single) Dim Threshold As Single Dim Start As Single Dim blnCancel As Boolean ' The Timer property of the DateAndTime object returns the seconds ' and milliseconds that have passed since midnight. Start = CSng(Timer) Threshold = MinimumInterval Do While CSng(Timer) < (Start + Duration) ' In a real application, some unit of work would ' be done here each time through the loop. If CSng(Timer) > (Start + Threshold) Then RaiseEvent PercentDone( Threshold / Duration, blnCancel) ' Check to see if the operation was canceled. If blnCancel Then Exit Sub Threshold = Threshold + MinimumInterval End If Loop End Sub
Когда приложение вызывает LongTask метод, Widget класс вызывает событие каждые PercentDoneMinimumInterval секунды. Когда событие возвращается, LongTask проверяет, установлен ли аргумент Cancel в True.
Здесь необходимо сделать несколько оговорок. Для простоты процедура предполагает, LongTask что вы знаете заранее, сколько времени займет задача. Это почти никогда не так. Разделение задач на блоки равного размера может быть трудно, и часто важно, что для пользователей наиболее значимо просто то количество времени, которое проходит, прежде чем они получат сигнал, что что-то происходит.
Возможно, вы заметили еще один недостаток в этом примере. Свойство Timer возвращает количество секунд, прошедших с полуночи, поэтому приложение зависает, если оно запущено непосредственно до полуночи. Более осторожный подход к измерению времени будет учитывать такие граничные условия, как это, или полностью избегать их, используя свойства, такие как Now.
Теперь, когда Widget класс может вызывать события, можно перейти к следующему пошаговому руководству.
Пошаговое руководство. Обработка событий демонстрирует, как использовать WithEvents для связывания обработчика событий с событием PercentDone .