Instruktaż: Obsługa zdarzeń (Visual Basic)
Jest to drugi dwoma tematami, które wykazują sposobu pracy ze zdarzeniami.Pierwszy temat, Instruktaż: zdarzenia deklarujący i podnoszenie, pokazuje, jak zadeklarować i wywołania zdarzeń.Ta sekcja używa formularza i klasy z tego instruktażu demonstrujące sposób obsługi zdarzeń, kiedy one mieć miejsce.
Widget Klasy przykładzie tradycyjnych instrukcje obsługi zdarzeń.Visual BasicPraca ze zdarzeniami zapewnia innych technik.Ćwiczenie, można zmodyfikować w tym przykładzie, aby użyć AddHandler i Handles instrukcji.
Do obsługi zdarzeń PercentDone klasy widżetu
Umieść następujący kod w Form1:
Private WithEvents mWidget As Widget Private mblnCancel As Boolean
WithEvents Słowa kluczowego Określa, że zmienna mWidget jest używana do obsługi zdarzeń obiektu.Rodzaj obiektu, można określić, podając nazwę klasy, z którego zostanie utworzony obiekt.
Zmienna mWidget jest zadeklarowany w Form1 ponieważ WithEvents zmiennych musi być na poziomie klasy.Ta zasada obowiązuje niezależnie od typu klasy, którą można umieścić je w.
Zmienna mblnCancel jest używana do anulowania LongTask metody.
Kod obsługi zdarzenia
Tak szybko, jak można zadeklarować zmiennej za pomocą WithEvents, nazwa zmiennej pojawi się na liście rozwijanej lewej klasy Edytor kodu.Po wybraniu mWidget, Widget klasy zdarzeń są wyświetlane na liście po prawej drop-down.Wybranie zdarzenia wyświetla odpowiednią procedurą zdarzenia z prefiksem mWidget i znaku podkreślenia.Procedur zdarzeń związanych z WithEvents zmienna podano nazwę zmiennej jako prefiksu.
Aby obsługiwać zdarzenie
Wybierz mWidget z listy rozwijanej po lewej stronie w Edytor kodu.
Wybierz PercentDone zdarzenia z listy po prawej drop-down.Edytor kodu otwiera mWidget_PercentDone procedurę zdarzenia.
[!UWAGA]
Edytor kodu jest użyteczne, ale nie jest to wymagane, wstawiania nowych programów obsługi zdarzeń.W tym instruktażu jest bardziej bezpośrednie po prostu skopiować obsługi zdarzeń bezpośrednio w kodzie.
Dodaj następujący kod do mWidget_PercentDone programu obsługi zdarzeń:
Private Sub mWidget_PercentDone( ByVal Percent As Single, ByRef Cancel As Boolean ) Handles mWidget.PercentDone lblPercentDone.Text = CInt(100 * Percent) & "%" My.Application.DoEvents() If mblnCancel Then Cancel = True End Sub
Gdy PercentDone zdarzenie jest wywoływane, procedura zdarzenia Wyświetla procent wykonania w Label kontroli.DoEvents Metoda pozwala na etykiecie do odświeżenia, a także daje użytkownikowi możliwość kliknij anulowanie przycisku.
Dodaj następujący kod dla Button2_Click programu obsługi zdarzeń:
Private Sub Button2_Click( ByVal sender As Object, ByVal e As System.EventArgs ) Handles Button2.Click mblnCancel = True End Sub
Jeśli użytkownik kliknie anulowanie przycisk podczas LongTask jest uruchomiony, Button2_Click zdarzeń jest wykonywany tak szybko, jak DoEvents instrukcji umożliwia przetwarzanie zdarzenia występują.Zmienna poziomie klasy mblnCancel jest ustawiona na Trueoraz mWidget_PercentDone zdarzenie, następnie sprawdza ją i ustawia ByRef Cancel argument True.
Łączenie zmiennej WithEvents do obiektu
Form1jest teraz skonfigurowane do obsługi Widget obiektu zdarzenia.Pozostaje do znalezienia Widget gdzieś.
Podczas deklarowania zmiennej WithEvents w czasie projektowania jest z nim skojarzony żaden obiekt.A WithEvents jest zmienna, podobnie jak inne zmienną obiektu.Trzeba utworzyć obiektu i przypisać odniesienie do niej z WithEvents zmienna.
Do utworzenia obiektu i przypisać do niego odwołanie
Wybierz (Formularz Form1 zdarzeń) z listy rozwijanej po lewej stronie w Edytor kodu.
Wybierz Load zdarzenia z listy po prawej drop-down.Edytor kodu otwiera Form1_Load procedurę zdarzenia.
Dodaj następujący kod dla Form1_Load procedurę zdarzenia, aby utworzyć Widget:
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles MyBase.Load mWidget = New Widget End Sub
Kiedy ten kod zostanie wykonany, Visual Basic tworzy Widget obiektów i łączy z jego zdarzeń do procedury zdarzenia związane z mWidget.Z tym, że punkt na każdym Widget podnosi jego PercentDone zdarzenie, mWidget_PercentDone jest wykonywana w procedurze zdarzenia.
Wywołanie metody LongTask
Dodaj następujący kod do Button1_Click programu obsługi zdarzeń:
Private Sub Button1_Click( ByVal sender As Object, ByVal e As System.EventArgs ) Handles Button1.Click mblnCancel = False lblPercentDone.Text = "0%" lblPercentDone.Refresh() mWidget.LongTask(12.2, 0.33) If Not mblnCancel Then lblPercentDone.Text = CStr(100) & "%" End Sub
Przed LongTask wywoływana jest metoda, etykieta Wyświetla procent wykonania musi być zainicjowany i poziomie klasy Boolean flagi dla anulowanie metoda musi być ustawiona na False.
LongTasknazywa się z czasem trwania zadania 12,2 sekund.PercentDone Zdarzenie jest wywoływane po każdej jednej trzeciej drugi.Przy każdym zdarzenie jest wywoływane, mWidget_PercentDone jest wykonywana w procedurze zdarzenia.
Gdy LongTask jest wykonywane, mblnCancel jest badany, aby sprawdzić, czy LongTask zakończyła się normalnie, lub Jeśli zatrzymane, ponieważ mblnCancel została ustawiona na True.Procent wykonania jest aktualizowany tylko w przypadku Byłej.
Aby uruchomić program
Naciśnij klawisz F5, aby umieścić projektu w trybie uruchamiania.
Kliknij przycisk Rozpocznij zadanie przycisku.Przy każdym PercentDone zdarzenie jest wywoływane, etykieta jest aktualizowana o procent wykonania zadania.
Kliknij przycisk anulowanie przycisk, aby zatrzymać zadanie.Warto zauważyć, że wygląd anulowanie przycisku nie powoduje zmiany natychmiast po kliknięciu go.Click Zdarzenia nie może się zdarzyć, aż do My.Application.DoEvents instrukcji umożliwia przetwarzanie zdarzenia.
[!UWAGA]
My.Application.DoEvents Metody nie przetwarzają zdarzenia w taki sam sposób, jak formularz.Na przykład, w tym instruktażu musi kliknąć anulowanie dwa razy przycisk.Aby zezwolić na formularz, aby obsługiwać zdarzenia bezpośrednio, można użyć wielowątkowość.Aby uzyskać więcej informacji, zobacz Wątki (C# i Visual Basic).
Może znaleźć instruktażowy do uruchomienia programu z F11 i kroków kod linii jednocześnie.Wyraźnie widać, w jaki sposób wprowadzi wykonanie LongTask, a następnie krótko odzwierciedlone Form1 przy każdym PercentDone zdarzenie jest wywoływane.
Co by się stało, jeżeli podczas wykonywania Wstecz w kodzie Form1, LongTask ponownie wywoływana metoda?W najgorszym przypadku może wystąpić przepełnienie stosu, jeśli LongTask były nazywane przy każdym podniesiono zdarzenia.
Może spowodować zmiennej mWidget do obsługi zdarzeń w różnych Widget obiektu przez przypisanie odniesienia do nowych Widget do mWidget.W rzeczywistości, można wprowadzić kod w Button1_Click to zrobić przy każdym kliknięciu przycisku.
Do obsługi zdarzeń dla różnych widżetu
Dodaj następujący wiersz kodu Button1_Click procedury bezpośrednio poprzedzającym linię, który czyta mWidget.LongTask(12.2, 0.33):
mWidget = New Widget ' Create a new Widget object.
Powyżej kodu tworzy nowy Widget przy każdym kliknięciu przycisku.Tak szybko, jak LongTask metoda kończy odniesienie do Widget jest wydany i Widget jest niszczony.
A WithEvents zmienna może zawierać tylko jeden obiekt odniesienia w czasie, więc jeśli można przypisać inną Widget obiektu do mWidget, poprzedniego Widget obiektu zdarzenia nie będą obsługiwane.Jeśli mWidget jest zmienną obiektu, na które zawierający odwołanie do starego Widget, niszczony jest obiekt.Jeśli chcesz obsłużyć zdarzenia z kilku Widget obiektów, użyj AddHandler instrukcji przetwarzania zdarzeń z każdego obiektu osobno.
[!UWAGA]
Można zadeklarować jako wiele WithEvents konieczne zmienne jako użytkownik, ale tablice WithEvents zmienne nie są obsługiwane.
Zobacz też
Zadania
Instruktaż: Deklarowanie i podnoszenie zdarzenia (Visual Basic)