Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a második olyan témakör, amely bemutatja, hogyan lehet együttműködni az eseményekkel. Az első témakör , útmutató: Események deklarálása és emelése, bemutatja, hogyan deklarálhat és emelhet eseményeket. Ez a szakasz az útmutató űrlapjának és osztályának használatával mutatja be, hogyan kezelheti az eseményeket, amikor azok történnek.
Az Widget osztály példája hagyományos eseménykezelési utasításokat használ. A Visual Basic további technikákat is biztosít az események kezelésére. Gyakorlatként módosíthatja ezt a példát a AddHandler és Handles utasítások használatára.
A Widget osztály PercentDone eseményének kezelése
Helyezze a következő kódot a következő helyre
Form1:Private WithEvents mWidget As Widget Private mblnCancel As BooleanA
WithEventskulcsszó azt határozza meg, hogy a változómWidgetegy objektum eseményeinek kezelésére szolgál. Az objektum típusának megadásához adja meg annak az osztálynak a nevét, amelyből az objektum létrejön.A
mWidgetváltozóForm1deklarálva van, mert aWithEventsváltozóknak osztályszintűnek kell lenniük. Ez az osztály típusától függetlenül igaz.A változó
mblnCancela metódusLongTasktörlésére szolgál.
Kód írása egy esemény kezeléséhez
Amint deklarál egy változót a használatával WithEvents, a változó neve megjelenik az osztály Kódszerkesztőjének bal oldali legördülő listájában. Ha kiválasztja mWidget, az Widget osztály eseményei megjelennek a jobb oldali legördülő listában. Az esemény kiválasztásakor megjelenik a megfelelő eseményeljárás az előtaggal mWidget és az aláhúzásjellel. A változóhoz WithEvents társított eseményeljárások előtagként kapják meg a változó nevét.
Esemény kezelése
Válasszon
mWidgeta Kódszerkesztő bal oldali legördülő listájából.Válassza ki az eseményt
PercentDonea jobb oldali legördülő listából. A Kódszerkesztő megnyitja az eseményeljárástmWidget_PercentDone.Megjegyzés:
A Kódszerkesztő hasznos, de nem kötelező az új eseménykezelők beszúrásához. Ebben az útmutatóban egyszerűbb, ha közvetlenül a kódba másolja az eseménykezelőket.
Adja hozzá a következő kódot az
mWidget_PercentDoneeseménykezelőhöz: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 SubAmikor az
PercentDoneesemény kiváltódik, az eseményeljárás megjeleníti a készültségi százalékot aLabelvezérlőelemben. ADoEventsmódszer lehetővé teszi a címke újrafestését, és lehetőséget ad a felhasználónak a Mégse gombra való kattintásra is.Adja hozzá a következő kódot az
Button2_Clickeseménykezelőhöz:Private Sub Button2_Click( ByVal sender As Object, ByVal e As System.EventArgs ) Handles Button2.Click mblnCancel = True End Sub
Ha a felhasználó a futása közben a LongTask gombra kattint, az Button2_Click esemény azonnal végrehajtásra kerül, amint a DoEvents utasítás lehetővé teszi az események feldolgozását. Az osztályszintű változó mblnCancel a következőre Truevan állítva, majd az mWidget_PercentDone esemény teszteli, és az argumentumot a ByRef Cancel következőre Trueállítja.
WithEvents-változó csatlakoztatása objektumhoz
Form1 most már be van állítva egy Widget objektum eseményeinek kezelésére. Már csak annyi van hátra, hogy találjon egy Widget valahol.
Ha a tervezéskor deklarál egy változót WithEvents , azzal nincs objektum társítva. A WithEvents változók ugyanolyanok, mint bármely más objektumváltozó. Létre kell hoznia egy objektumot, és hozzá kell rendelnie egy hivatkozást a WithEvents változóhoz.
Objektum létrehozása és hivatkozás hozzárendelése
A Kódszerkesztő bal oldali legördülő listájában válassza az (1. űrlapesemények) lehetőséget.
Válassza ki az eseményt
Loada jobb oldali legördülő listából. A Kódszerkesztő megnyitja az eseményeljárástForm1_Load.Adja hozzá a következő kódot az
Form1_Loadeseményeljáráshoz aWidgetkövetkező létrehozásához:Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles MyBase.Load mWidget = New Widget End Sub
A kód végrehajtásakor a Visual Basic létrehoz egy Widget objektumot, és összekapcsolja az eseményeket a kapcsolódó eseményeljárásokkal mWidget. Attól kezdve, hogy az Widget elindítja a PercentDone eseményt, a mWidget_PercentDone eseményeljárás végrehajtásra kerül.
A LongTask metódus meghívása
Adja hozzá a következő kódot az
Button1_Clickeseménykezelőhöz: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
A metódus meghívása LongTask előtt inicializálni kell a készültségi szintet megjelenítő címkét, és a metódus megszakítására szolgáló osztályszintű Boolean jelzőt a következőre Falsekell állítani: .
LongTask 12,2 másodperces feladatidőtartammal lett meghívva. A PercentDone esemény minden egyharmad másodpercben megtörténik. Minden alkalommal, amikor az esemény elő van állítva, az mWidget_PercentDone eseményeljárás végrehajtása történik.
Amikor LongTask elkészül, a rendszer azt ellenőrzi, hogy mblnCancel normálisan fejeződött-e be, vagy leállt-e, mert LongTaskmblnCancel értékre lett állítva. A készültségi szint csak a korábbi esetben frissül.
A program futtatása
Nyomja le az F5 billentyűt a projekt futási módba helyezéséhez.
Kattintson a Feladat indítása gombra. Az esemény minden egyes
PercentDoneelőfordulásakor frissül a címke, amely a tevékenység befejezésének százalékos arányát mutatja.Kattintson a Mégse gombra a feladat leállításához. Vegye észre, hogy amikor rákattint a Mégse gombra, annak megjelenése nem változik azonnal. Az
Clickesemény csak akkor történhet meg, ha az utasítás engedélyezi azMy.Application.DoEventsesemények feldolgozását.Megjegyzés:
A
My.Application.DoEventsmetódus nem ugyanúgy dolgozza fel az eseményeket, mint az űrlap. Például ebben az útmutatóban kétszer kell a Mégse gombra kattintania. Ha lehetővé szeretné tenni, hogy az űrlap közvetlenül kezelje az eseményeket, többszálú elemet használhat. További információ: Felügyelt szálkezelés.
Hasznos lehet, ha a programot az F11-el futtatja, és soronként haladva lép végig a kódon. Világosan láthatja, hogyan lép be LongTask a végrehajtás, majd rövid időre újra belép Form1 minden alkalommal, amikor az PercentDone esemény történik.
Mi történne, ha a végrehajtás a Form1 kódjában lenne, és újra meghívnák a LongTask metódust? Legrosszabb esetben stack túlcsordulás fordulhat elő, ha LongTask minden egyes alkalommal meghívásra kerül, amikor az esemény bekövetkezik.
Az új mWidget-re való hivatkozás Widget-hoz rendelésével a változó kezelheti egy másik Widget objektum eseményeit. Tulajdonképpen a Button1_Click kód minden alkalommal végrehajtódik, amikor a gombra kattint.
Egy másik widget eseményeinek kezelése
Adja hozzá a következő kódsort az
Button1_Clickeljáráshoz, közvetlenül az olvasásimWidget.LongTask(12.2, 0.33)sor előtt:mWidget = New Widget ' Create a new Widget object.
A fenti kód minden kattintáskor létrehoz egy újat Widget . Amint a LongTask eljárás befejeződik, a Widget hivatkozás felszabadul, és a Widget megsemmisül.
A WithEvents változók egyszerre csak egy objektumhivatkozást tartalmazhatnak, így ha egy másik Widget objektumot mWidgetrendel hozzá, az előző Widget objektum eseményei már nem lesznek kezelve. Ha mWidget az egyetlen objektumváltozó, amely a régire Widgetmutató hivatkozást tartalmaz, az objektum megsemmisül. Ha több Widget objektum eseményeit szeretné kezelni, az AddHandler utasítás használatával külön-külön dolgozza fel az egyes objektumok eseményeit.
Megjegyzés:
Annyi változót deklarálhat WithEvents , amennyit csak szeretne, de a változótömbök WithEvents nem támogatottak.