Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 objekt Widget zobrazoval dialogové okno s procentem dokončení, ale pak byste byli omezeni tímto dialogovým oknem v každém projektu, ve kterém jste použili třídu Widget. 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 událost PercentDone a nechat proceduru, která volá metody Widget, aby zpracovala tuto událost a zobrazila aktualizace 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.
Objekt Vlastnictví Nastavení Button1TextSpustit úkol Button2TextZrušit Label(Name),TextlblPercentDone, 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
Eventslova deklarujte událost veWidgettřídě. Všimněte si, že událost může mítByValaByRefargumenty, jakWidgetPercentDoneukazuje 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
Timervlastnosti používané touto třídou, přidejteImportspříkaz na začátek oddílu deklarací modulu třídy nadClass Widgetpříkaz.Imports Microsoft.VisualBasic.DateAndTimeDo třídy
Widgetpřidejte následující kód: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 stejných velikostí může být obtížné a často to, co je pro uživatele nejdůležitější, je jednoduše doba, která uplyne, než obdrží indicii, ž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 by se jim úplně vyhnul pomocí vlastností, jako je Now.
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.