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 az útmutató bemutatja, hogyan deklarálhat és indíthat eseményeket egy Widget nevű 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 az adott pillanatban van egy Widget osztálya. 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ó Widgeteljá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.
Form1Adjon 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 Ingatlan Beállítás Button1TextTevékenység indítása Button2TextÉrvénytelenít Label(Name),TextlblPercentDone, 0 A Projekt menüBen válassza az Osztály hozzáadása lehetőséget a projekthez elnevezett
Widget.vbosztály hozzáadásához.
Esemény deklarálása a Widget osztályhoz
EventA kulcsszóval deklarálhat egy eseményt azWidgetosztályban. Vegye figyelembe, hogy egy eseménynek lehetnekByValargumentumai ésByRefargumentumai, ahogyWidgetazPercentDone"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.
Megjegyzé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 a LongTask osztály Widget metódusa kiváltja.
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
Timeregyszerűsítése érdekében adjon hozzá egy utasítástImportsaz osztálymodul deklarációk szakaszának tetejére azClass Widgetutasítás fölött.Imports Microsoft.VisualBasic.DateAndTimeAdja hozzá a következő kódot az
Widgetosztá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 PercentDone másodpercben előhozza az MinimumInterval 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 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 kiválthat eseményeket, tovább léphet a következő útmutatóhoz.
Útmutató: Az események kezelése bemutatja, hogyan társíthat WithEvents eseménykezelőt az PercentDone eseményhez.