Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här genomgången visar hur du deklarerar och genererar händelser för en klass med namnet Widget. När du har slutfört stegen kanske du vill läsa det tillhörande ämnet Genomgång: Hantera händelser, som visar hur du använder händelser från Widget objekt för att tillhandahålla statusinformation i ett program.
Widgetklassen
Anta för tillfället att du har en Widget klass. Klassen Widget har en metod som kan ta lång tid att köra och du vill att programmet ska kunna sätta upp någon form av slutförandeindikator.
Du kan naturligtvis göra så att Widget objektet visar en dialogruta för procent klart, men sedan fastnar du med den dialogrutan i varje projekt där du använder Widget-klassen. En bra princip för objektdesign är att låta programmet som använder ett objekt hantera användargränssnittet, såvida inte hela syftet med objektet är att hantera ett formulär eller en dialogruta.
Syftet med Widget är att utföra andra uppgifter, så det är bättre att lägga till en PercentDone händelse och låta proceduren som anropar Widgetmetoderna hantera händelsen och visa statusuppdateringar. Händelsen PercentDone kan också ge en mekanism för att avbryta uppgiften.
Skapa kodexemplet för det här ämnet
Öppna ett nytt Visual Basic Windows-programprojekt och skapa ett formulär med namnet
Form1.Lägg till två knappar och en etikett i
Form1.Namnge objekten enligt följande tabell.
Objekt Fastighet Inställning Button1TextStarta aktivitet Button2TextAnnullera Label(Name),TextlblProcentKlart, 0 På projektmenyn väljer du Lägg till klass för att lägga till en klass med namnet
Widget.vbi projektet.
Deklarera en händelse för widgetklassen
Använd nyckelordet
Eventför att deklarera en händelse iWidgetklassen. Observera att en händelse kan haByValochByRefargument, somWidgethändelsenPercentDonevisar:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
När det anropande objektet tar emot en PercentDone händelse Percent innehåller argumentet procentandelen av den slutförda aktiviteten. Argumentet Cancel kan ställas in på True för att avbryta metoden som skapade händelsen.
Anmärkning
Du kan deklarera händelseargument precis som du gör argument för procedurer, med följande undantag: Händelser kan inte ha Optional eller ParamArray argument och händelser har inte returvärden.
Händelsen PercentDone genereras av LongTask klassens Widget metod.
LongTask tar två argument: hur lång tid metoden låtsas utföra arbete och det minsta tidsintervallet innan LongTask pauser för att skapa PercentDone händelsen.
Så här triggar du händelsen PercentDone
För att förenkla åtkomsten till den egenskap som används av den
Timerhär klassen lägger du till enImportsinstruktion överst i deklarationsavsnittet i klassmodulen ovanför -instruktionenClass Widget.Imports Microsoft.VisualBasic.DateAndTimeLägg till följande kod i
Widgetklassen: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
När din applikation anropar metoden LongTask, genererar klassen Widget händelsen PercentDone varje MinimumInterval sekund. När händelsen returneras LongTask kontrollerar du om Cancel argumentet har angetts till True.
Här krävs några ansvarsfriskrivningar. För enkelhetens skull förutsätter proceduren LongTask att du i förväg vet hur lång tid uppgiften tar. Detta är nästan aldrig fallet. Att dela upp uppgifter i segment av jämn storlek kan vara svårt, och ofta är det som är viktigast för användarna helt enkelt den tid som går innan de får en indikation på att något händer.
Du kan ha upptäckt en annan brist i det här exemplet. Egenskapen Timer returnerar antalet sekunder som har passerat sedan midnatt. Därför fastnar programmet om det startas strax före midnatt. En mer noggrann metod för att mäta tid skulle ta hänsyn till gränsförhållanden som detta, eller undvika dem helt och hållet, med hjälp av egenskaper som Now.
Nu när Widget klassen kan skapa händelser kan du gå vidare till nästa genomgång.
Genomgång: Hantering av händelser visar hur du använder WithEvents för att associera en händelsehanterare med PercentDone händelsen.