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.
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
Handlescsak akkor csatolhat eseménykezelőt egy objektumhoz, ha az esemény az objektum osztályának vagy alaposztályának tagja. AHandleshasználatával például csatolhat egy Click eseménykezelőt egy olyan gombhoz, amelynek alaposztálya ButtonBase emeli aClickirá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 egyClickesemé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.Handlesnem 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.Handlesszintaxis nem támogatja Handled események eseménykezelői meghívását. Ha engedélyezni szeretné az eseménykezelő meghívásátHandledeseményekhez, csatolja az eseménykezelőt a AddHandler(RoutedEvent, Delegate, Boolean) metódussal, és állítsahandledEventsTooparaméteréttrue.
Lásd még
.NET Desktop feedback