Útmutató: Események deklarálása és emelése (Visual Basic)
Ez az útmutató bemutatja, hogyan deklarálhat és emelhet eseményeket egy nevesített Widget
osztály számára. A lépések elvégzése után érdemes elolvasni a kísérő témakört, amely az Események kezelése című témakört mutatja be, amely bemutatja, hogyan használható objektumok eseményei Widget
az alkalmazás állapotadatainak megadására.
A widget osztály
Tegyük fel, hogy van egy osztálya Widget
. Az Widget
osztály olyan metódussal rendelkezik, amely hosszú időt vehet igénybe, és azt szeretné, hogy az alkalmazás valamilyen befejezési mutatót tudjon elhelyezni.
Természetesen azt is megteheti, hogy az Widget
objektum százalékban kész párbeszédpanelt jelenít meg, de akkor minden olyan projektben, amelyben az Widget
osztályt használta, a párbeszédpanelen elakadt. Az objektumtervezés egyik alapelve, hogy hagyja, hogy az objektumot használó alkalmazás kezelje a felhasználói felületet – kivéve, ha az objektum teljes célja egy űrlap vagy párbeszédpanel kezelése.
A cél Widget
más feladatok végrehajtása, ezért jobb, ha hozzáadunk egy eseményt PercentDone
, és hagyjuk, hogy a metódusokat meghívó Widget
eljárás kezelje az eseményt, és megjelenítse az állapotfrissítéseket. Az PercentDone
esemény egy mechanizmust is biztosít a feladat megszakításához.
A jelen témakörhöz tartozó példakód létrehozása
Nyisson meg egy új Visual Basic Windows-alkalmazásprojektet, és hozzon létre egy űrlapot.
Form1
Adjon hozzá két gombot és egy címkét a következőhöz
Form1
:Nevezze el az objektumokat az alábbi táblázatban látható módon.
Objektum Tulajdonság Beállítás Button1
Text
Tevékenység indítása Button2
Text
Mégse Label
(Name)
,Text
lblPercentDone, 0 A Projekt menüBen válassza az Osztály hozzáadása lehetőséget a projekthez elnevezett
Widget.vb
osztály hozzáadásához.
Esemény deklarálása a Widget osztályhoz
Event
A kulcsszóval deklarálhat egy eseményt azWidget
osztályban. Vegye figyelembe, hogy egy eseménynek lehetnekByVal
argumentumai ésByRef
argumentumai, ahogyWidget
azPercentDone
"esemény is mutatja:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Amikor a hívó objektum eseményt PercentDone
kap, az Percent
argumentum a befejezett tevékenység százalékos arányát tartalmazza. Az Cancel
argumentum beállítható úgy, hogy True
megszakítsa az eseményt okozó metódust.
Feljegyzés
Az eseményargumentumokat ugyanúgy deklarálhatja, mint az eljárások argumentumait, a következő kivételekkel: Az események nem tartalmazhatnak Optional
vagy ParamArray
argumentumokat, és az események nem rendelkeznek visszatérési értékekkel.
Az PercentDone
eseményt az LongTask
osztály metódusa emeli Widget
ki. LongTask
Két argumentumot vesz fel: azt az időtartamot, amíg a metódus úgy tesz, mintha dolgozik, és a szüneteltetés előtti LongTask
minimális időintervallumot az PercentDone
esemény felemeléséhez.
A PercentDone esemény felemelése
Az osztály által használt tulajdonsághoz való hozzáférés
Timer
egyszerűsítése érdekében adjon hozzá egy utasítástImports
az osztálymodul deklarációk szakaszának tetejére azClass Widget
utasítás fölött.Imports Microsoft.VisualBasic.DateAndTime
Adja hozzá a következő kódot az
Widget
osztályhoz: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
Amikor az alkalmazás meghívja a metódustLongTask
, az Widget
osztály minden MinimumInterval
másodpercben előhozza az PercentDone
eseményt. Amikor az esemény visszatér, ellenőrzi, LongTask
hogy az Cancel
argumentum értéke be van-e állítva True
.
Itt szükség van néhány jogi nyilatkozatra. Az egyszerűség kedvéért az LongTask
eljárás feltételezi, hogy előre tudja, mennyi ideig tart a feladat. Ez szinte soha nem így van. A feladatok egyenletes méretű adattömbökre való felosztása nehéz lehet, és a felhasználók számára gyakran az a legfontosabb, hogy mennyi idő telik el, mielőtt jelezhetik, hogy valami történik.
Lehet, hogy egy másik hibát észlelt ebben a mintában. A Timer
tulajdonság az éjfél óta eltelt másodpercek számát adja vissza, ezért az alkalmazás elakad, ha az éjfél előtt indul el. Az időmérés óvatosabb megközelítése figyelembe veszi az ilyen határfeltételeket, vagy teljesen elkerüli azokat olyan tulajdonságok használatával, mint a Now
.
Most, hogy az Widget
osztály eseményeket emelhet ki, továbbléphet a következő útmutatóra. Útmutató: Az események kezelése bemutatja, hogyan társíthat WithEvents
eseménykezelőt az PercentDone
eseményhez.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: