Návod: Deklarace a vyvolávání událostí (Visual Basic)
Tento návod ukazuje, jak deklarovat a vyvolat události pro třídu s názvem Widget
. Po dokončení kroků můžete chtít přečíst doprovodné téma Návod : Zpracování událostí, které ukazuje, jak pomocí událostí z Widget
objektů poskytnout informace o stavu v aplikaci.
Třída widgetu
Předpokládejme, že máte Widget
třídu. Vaše Widget
třída má metodu, která může trvat dlouhou dobu, než se spustí, a vy chcete, aby vaše aplikace mohla vložit nějaký druh indikátoru dokončení.
Samozřejmě můžete nastavit, aby Widget
objekt zobrazoval dialogové okno dokončeno procent, ale pak byste se s tímto dialogovým oknem zasekli v každém projektu, ve kterém jste použili Widget
třídu. Dobrým principem návrhu objektu je nechat aplikaci, která používá objekt, zpracovává uživatelské rozhraní – pokud celý účel objektu není spravovat formulář nebo dialogové okno.
Účelem Widget
je provádět jiné úlohy, takže je lepší přidat PercentDone
událost a nechat proceduru, která volá Widget
metody zpracování této události a zobrazení aktualizací stavu. Událost PercentDone
může také poskytnout mechanismus pro zrušení úlohy.
Sestavení příkladu kódu pro toto téma
Otevřete nový projekt aplikace pro Windows v jazyce Visual Basic a vytvořte formulář s názvem
Form1
.Přidejte dvě tlačítka a popisek do
Form1
.Pojmenujte objekty, jak je znázorněno v následující tabulce.
Object Vlastnost Nastavení Button1
Text
Spustit úkol Button2
Text
Zrušit Label
(Name)
,Text
lblPercentDone, 0 V nabídce Projekt zvolte Přidat třídu a přidejte do projektu třídu pojmenovanou
Widget.vb
.
Deklarace události pro třídu Widget
Pomocí klíčového
Event
slova deklarujte událost veWidget
třídě. Všimněte si, že událost může mítByVal
aByRef
argumenty, jakWidget
PercentDone
ukazuje událost:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Když volající objekt obdrží PercentDone
událost, Percent
argument obsahuje procento dokončeného úkolu. Argument Cancel
lze nastavit tak, aby True
zrušil metodu, která vyvolala událost.
Poznámka:
Argumenty události můžete deklarovat stejně jako argumenty procedur s následujícími výjimkami: Události nemohou mít Optional
nebo ParamArray
argumenty a události nemají návratové hodnoty.
Událost PercentDone
je vyvolána LongTask
metodou Widget
třídy. LongTask
má dva argumenty: doba, po kterou metoda předstírala, že pracuje, a minimální časový interval před LongTask
pozastavením pro vyvolání PercentDone
události.
Vyvolání události PercentDone
Chcete-li zjednodušit přístup k
Timer
vlastnosti používané touto třídou, přidejteImports
příkaz na začátek oddílu deklarací modulu třídy nadClass Widget
příkaz.Imports Microsoft.VisualBasic.DateAndTime
Do třídy přidejte následující kód
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
Když vaše aplikace volá metodu LongTask
, Widget
třída vyvolá PercentDone
událost každých MinimumInterval
sekund. Když se událost vrátí, zkontroluje, LongTask
zda Cancel
byl argument nastaven na True
.
Tady je potřeba několik omezení. Pro zjednodušení tento LongTask
postup předpokládá, že předem víte, jak dlouho bude úkol trvat. To je skoro nikdy případ. Rozdělení úkolů na bloky sudých velikostí může být obtížné a často to, co je pro uživatele nejdůležitější, jednoduše doba, po kterou projde, než zjistí, že se něco děje.
Možná jste v této ukázce viděli další chybu. Vlastnost Timer
vrátí počet sekund, které uplynuly od půlnoci, a proto se aplikace zasekne, pokud je spuštěna těsně před půlnocí. Opatrnější přístup k měření času by při zvažování hraničních podmínek, jako je tento, nebo se jim úplně vyhnul pomocí vlastností, jako Now
je .
Teď, když Widget
třída může vyvolat události, můžete přejít k dalšímu návodu. Návod: Zpracování událostí ukazuje použití WithEvents
k přidružení obslužné rutiny události k PercentDone
události.