Megosztás a következőn keresztül:


Ú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 Widgetosztá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ó 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

  1. Nyisson meg egy új Visual Basic Windows-alkalmazásprojektet, és hozzon létre egy űrlapot.Form1

  2. Adjon hozzá két gombot és egy címkét a következőhöz Form1:

  3. 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
  4. 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 az Widget osztályban. Vegye figyelembe, hogy egy eseménynek lehetnek ByVal argumentumai és ByRef argumentumai, ahogy Widgetaz PercentDone "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

  1. 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ást Imports az osztálymodul deklarációk szakaszának tetejére az Class Widget utasítás fölött.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. 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