Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku pokazano, jak zadeklarować i zgłosić zdarzenia dla klasy o nazwie Widget. Po wykonaniu tych kroków możesz przeczytać temat towarzyszący , Przewodnik: obsługa zdarzeń, który pokazuje, jak używać zdarzeń z Widget obiektów w celu udostępnienia informacji o stanie w aplikacji.
Klasa widżetu
Załóżmy na chwilę, że masz klasę Widget . Klasa Widget ma metodę, która może zająć dużo czasu, i chcesz, aby aplikacja mogła umieścić jakiś wskaźnik ukończenia.
Oczywiście można sprawić, że Widget obiekt pokaże okno dialogowe procentu, ale następnie utkniesz z tym oknem dialogowym w każdym projekcie, w którym użyto Widget klasy. Dobrą zasadą projektowania obiektu jest pozwolić aplikacji, która używa obiektu do obsługi interfejsu użytkownika — chyba że cały cel obiektu jest zarządzanie formularzem lub oknom dialogowym.
Celem Widget jest wykonywanie różnych zadań, więc lepiej jest dodać zdarzenie PercentDone i umożliwić procedurze, która wywołuje metody Widget, obsługiwanie tego zdarzenia i wyświetlanie aktualizacji statusu. Zdarzenie PercentDone może również zapewnić mechanizm anulowania zadania.
Aby skompilować przykład kodu dla tego tematu
Otwórz nowy projekt aplikacji systemu Windows w języku Visual Basic i utwórz formularz o nazwie
Form1.Dodaj dwa przyciski i etykietę do
Form1.Nadaj obiektom nazwę, jak pokazano w poniższej tabeli.
Przedmiot Majątek Ustawienia Button1TextRozpocznij zadanie Button2TextAnuluj Label(Name),TextlblProcentWykonania, 0 W menu Projekt wybierz pozycję Dodaj klasę , aby dodać klasę o nazwie
Widget.vbdo projektu.
Aby zadeklarować zdarzenie dla klasy Widget
Użyj słowa kluczowego
Event, aby zadeklarować zdarzenie wWidgetklasie. Należy pamiętać, że zdarzenie może mieć argumentyByValorazByRef, jak pokazuje zdarzenieWidgetPercentDone.Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Gdy obiekt wywołujący odbiera PercentDone zdarzenie, Percent argument zawiera wartość procentową ukończenia zadania. Argument Cancel można ustawić na wartość True , aby anulować metodę, która wywołała zdarzenie.
Uwaga / Notatka
Argumenty zdarzeń można zadeklarować tak samo jak argumenty procedur, z następującymi wyjątkami: Zdarzenia nie mogą mieć Optional argumentów lub ParamArray nie mają zwracanych wartości.
Zdarzenie PercentDone jest wywoływane przez metodę LongTaskWidget klasy .
LongTask przyjmuje dwa argumenty: czas, przez który metoda udaje, że wykonuje pracę, oraz minimalny interwał czasu przed wstrzymaniem LongTask w PercentDone celu podniesienia zdarzenia.
Aby wywołać zdarzenie PercentDone
Aby uprościć dostęp do właściwości używanej
Timerprzez tę klasę, dodaj instrukcjęImportsna początku sekcji deklaracji modułu klasy powyżej instrukcjiClass Widget.Imports Microsoft.VisualBasic.DateAndTimeDodaj następujący kod do
Widgetklasy: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
Gdy aplikacja wywołuje metodę LongTask, klasa Widget zgłasza zdarzenie PercentDone co MinimumInterval sekundy. Po powrocie zdarzenia LongTask sprawdza, czy argument Cancel został ustawiony na wartość True.
W tym miejscu konieczne jest kilka zastrzeżeń. Dla uproszczenia procedura zakłada, LongTask że wiesz z wyprzedzeniem, jak długo będzie trwać zadanie. To prawie nigdy nie jest tak. Dzielenie zadań na fragmenty o równomiernym rozmiarze może być trudne, a często to, co ma największe znaczenie dla użytkowników, to po prostu ilość czasu, który przechodzi, zanim otrzymają wskazanie, że coś się dzieje.
Być może w tym przykładzie wykryto kolejną wadę. Właściwość Timer zwraca liczbę sekund, które przeszły od północy, w związku z czym aplikacja utknie, jeśli jest uruchomiona tuż przed północą. Bardziej ostrożne podejście do pomiaru czasu brałoby pod uwagę warunki graniczne, takie jak to, lub całkowicie ich unikać, korzystając z właściwości, takich jak Now.
Teraz, gdy Widget klasa może zgłaszać zdarzenia, możesz przejść do następnej instrukcji krok po kroku.
Przewodnik: Obsługa zdarzeń pokazuje, jak używać WithEvents aby powiązać procedurę obsługi zdarzenia ze zdarzeniem PercentDone.