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


Visual Basic és WPF eseménykezelés

Ha a Visual Basic .NET-ben kódol, a nyelvspecifikus Fogópontok kulcsszóval csatolhat eseménykezelőt egy objektumhoz. Az objektum lehet egy kód mögötti fájlban lévő példány vagy egy elem az Extensible Application Markup Language (XAML) fájlban. Handles használható eseménykezelők hozzárendelésére a gyakori nyelvi futtatókörnyezeti (CLR) eseményekhez vagy a Windows Presentation Foundation (WPF) irányított eseményekhez. Handles azonban bizonyos használati korlátozások az irányított események eseménykezelőinek csatolásához.

Előfeltételek

A cikk alapszintű ismereteket feltételez az útválasztott eseményekről, és feltételezi, hogy elolvasta az Útválasztott események áttekintésecímű részt. A cikkben szereplő példák követéséhez segít, ha ismeri az XAML(Extensible Application Markup Language) nyelvet, és ismeri a Windows Presentation Foundation (WPF) alkalmazások írásának módját.

Szemantika

A Sub kulcsszót használó deklaráció szintaxisa a következő: Sub <procedure name> Handles <object name>.<event name>. Ez a szintaxis egy olyan eseménykezelőt jelöl ki, amely akkor fog futni, ha a <event name> által megadott esemény egy <object name>által megadott objektumra kerül. Az eseménynek az objektum osztályának vagy alaposztályának tagjának kell lennie. Az alábbi példa bemutatja, hogyan csatolhat eseménykezelőt egy XAML-elemhez Handleshasználatával.

' Click event handler attached to XamlButton using Handles.
Private Sub XamlButton_Click(sender As Object, e As RoutedEventArgs) Handles XamlButton.Click

    ' Handler logic.
    Debug.WriteLine($"Click event handler attached to XamlButton using Handles.")

End Sub

Ha a Handles kód mögött definiált objektummal szeretné használni, az objektumot általában a WithEvents kulcsszóval deklarálja. További információkért a WithEvents használatáról, tekintse meg ezeket a példákat. A WPF automatikusan deklarálja az összes XAML-elemet Friend WithEventshasználatával. Az alábbi példa bemutatja, hogyan deklarálhat egy kód mögötti kódban definiált objektumot WithEventshasználatával.

' Declare a new button using WithEvents.
Dim WithEvents CodeButton As New Button With {
    .Content = "New button",
    .Background = Brushes.Yellow
}

' Click event handler attached to CodeButton using Handles.
Private Sub CodeButton_Click(sender As Object, e As RoutedEventArgs) Handles CodeButton.Click

    ' Handler logic.
    Debug.WriteLine($"Click event handler attached to CodeButton using Handles.")

End Sub

Ha ugyanazt a kezelőt több eseményhez szeretné használni, vesszővel válassza el a <object name>.<event name> eseményeket. Például: Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. A vesszővel elválasztott események sorrendje nem lényegtelen.

Ugyanahhoz az eseményhez különböző kezelőket rendelhet több Handles utasítással. A Handles utasítások sorrendje nem határozza meg a kezelők meghívásának sorrendjét az esemény bekövetkezésekor.

Jótanács

A Handles-vel hozzáadott kezelő eltávolításához hívja meg a RemoveHandlerfüggvényt. Például: RemoveHandler Button1.Click, AddressOf Button1_Click.

"Kezelők" használata WPF-alkalmazásban

Az XAML-ben definiált objektumok esetében a kezeli eseményszintaxisát, <object name>.<event name> az objektumot jelképező XAML-elemnek rendelkeznie kell egy Name vagy x:Name tulajdonságmal. Az XAML-lap gyökéreleméhez azonban nincs szükség névtulajdonságra, amelyhez használhatja a Menevet. Az alábbi példa bemutatja, hogyan csatolhat eseménykezelőt egy XAML-lapgyökérhöz Handleshasználatával.

' Loaded event handler attached to the XAML page root using Handles.
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded

    ' Handler logic.
    Debug.WriteLine($"Loaded event handler attached to Window using Handles.")

End Sub

XAML-lap fordításakor minden Name vagy x:Name paraméterrel rendelkező XAML-elemet Friend WithEvents-ként deklarálnak. Ennek eredményeképpen bármilyen XAML-elemet használhat a Handlesfunkcióval.

Jótanács

A Visual Studio IntelliSense megjeleníti a Handles-val használható objektumokat.

Függetlenül attól, hogy Handles, XAML attribútumszintaxissal, AddHandler utasítással vagy AddHandler metódussal csatol egy eseménykezelőt, az eseményrendszer működése ugyanaz.

Megjegyzés:

Ne használjon XAML-attribútumokat és Handles ugyanazt az eseménykezelőt ugyanahhoz az eseményhez, ellenkező esetben az eseménykezelő kétszer lesz meghívva minden eseményhez.

Korlátozások

A handles kulcsszó a következő használati korlátozásokkal rendelkezik:

  • Az Handles csak akkor csatolhat eseménykezelőt egy objektumhoz, ha az esemény az objektum osztályának vagy alaposztályának tagja. A Handles használatával például csatolhat egy Click eseménykezelőt egy olyan gombhoz, amelynek alaposztálya ButtonBase emeli a Click irányított eseményt. A irányított események egyik jellemzője azonban az, hogy az elemfán haladnak át, ami lehetővé teszi, hogy egy Click eseményt magasabb szinten figyeljenek és kezeljenek, mint az azt felhozó elem. A szülőelem által figyelt és kezelt irányított eseményt csatolt eseménynek nevezzük. Handles nem használható csatolt eseményekhez, mert szintaxisa nem támogatja az XAML-elemfa más figyelőjének megadását, mint az eseményt indító elem. Ha eseménykezelőket szeretne hozzárendelni a csatolt eseményekhez, XAML attribútumszintaxist vagy AddHandler metódust kell használnia. További információ a csatolt eseményekről: Csatolt események áttekintése és Csatolt események a WPF.

  • Handles szintaxis nem támogatja Handled események eseménykezelői meghívását. Ha engedélyezni szeretné az eseménykezelő meghívását Handled eseményekhez, csatolja az eseménykezelőt a AddHandler(RoutedEvent, Delegate, Boolean) metódussal, és állítsa handledEventsToo paraméterét true.

Lásd még