Visual Basic ve WPF olay işleme (WPF .NET)
Visual Basic .NET'te kodluyorsanız, bir nesneye olay işleyicisi eklemek için dile özgü Handles anahtar sözcüğünü kullanabilirsiniz. Nesnesi arka planda kod içindeki bir örnek veya Genişletilebilir Uygulama biçimlendirme dili (XAML) içindeki bir öğe olabilir. Handles
ortak dil çalışma zamanı (CLR) olayları veya Windows Presentation Foundation (WPF) ile yönlendirilen olaylar için olay işleyicileri atamak için kullanılabilir. Ancak, Handles
yönlendirilen olaylar için olay işleyicileri eklemek için kullanıldığında bazı kullanım sınırlamaları vardır.
Önkoşullar
Makalede, yönlendirilen olaylar hakkında temel bilgiler edindiğiniz ve Yönlendirilen olaylara genel bakış makalesini okuduğunuz varsayılır. Bu makaledeki örnekleri takip etmek için, Genişletilebilir Uygulama biçimlendirme dili (XAML) hakkında bilgi sahibi olmanız ve Windows Presentation Foundation (WPF) uygulamalarının nasıl yazıldığından haberdar olmanız yardımcı olur.
Sözdizimi
Handles anahtar sözcüğünü kullanan bir Sub
bildirimin söz dizimi: Sub <procedure name> Handles <object name>.<event name>
. Bu söz dizimi, tarafından belirtilen bir olay tarafından <object name>
belirtilen <event name>
bir nesne üzerinde tetiklendiğinde çalıştırılacak olay işleyicisi olarak bir yordam belirtir. Olay, nesnenin sınıfının veya temel sınıfının bir üyesi olmalıdır. Aşağıdaki örnekte kullanarak Handles
bir XAML öğesine olay işleyicisi ekleme gösterilmektedir.
' 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
Arka planda kod içinde tanımlanan bir nesneyle kullanmak Handles
için genellikle WithEvents anahtar sözcüğünü kullanarak nesneyi bildirirsiniz. Kullanım hakkında WithEvents
daha fazla bilgi için bu örneklere bakın. WPF, kullanarak Friend WithEvents
tüm XAML öğelerini otomatik olarak bildirir. Aşağıdaki örnekte kullanarak WithEvents
arka planda tanımlanan bir nesneyi bildirme işlemi gösterilmektedir.
' 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
Aynı işleyiciyi birden çok olay için kullanmak için olayları virgülle <object name>.<event name>
ayırın. Örneğin, Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click
. Virgülle ayrılmış olayların sırası önemsizdir.
Aynı olay için birden çok Handles
deyimle farklı işleyiciler atayabilirsiniz. deyimlerinin Handles
sırası, olay gerçekleştiğinde işleyicilerin çağrılma sırasını belirlemez.
İpucu
ile Handles
eklenen bir işleyiciyi kaldırmak için RemoveHandler'ı çağırabilirsiniz. Örneğin, RemoveHandler Button1.Click, AddressOf Button1_Click
.
WPF uygulamasında 'Handles' kullanma
XAML'de tanımlanan bir nesne için Handles olay söz dizimi<object name>.<event name>
, nesneyi temsil eden XAML öğesinin veya Name x:Name özelliğine sahip olmasını gerektirir. Ancak, adını kullanabileceğiniz XAML sayfası kök öğesi için bir ad Me
özelliği gerekli değildir. Aşağıdaki örnekte kullanarak Handles
bir XAML sayfası köküne olay işleyicisi ekleme gösterilmektedir.
' 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
Bir XAML sayfası derlendiğinde, veya x:Name
parametresi olan Name
her XAML öğesi olarak Friend WithEvents
bildirilir. Sonuç olarak, ile Handles
herhangi bir XAML öğesini kullanabilirsiniz.
İpucu
Visual Studio IntelliSense ile Handles
kullanılabilecek nesneleri gösterir.
kullanarak bir olay işleyicisi Handles
eklemenize bakılmaksızın, XAML özniteliği söz dizimi, AddHandler deyimi veya AddHandler yöntemi, olay sistemi davranışı aynıdır.
Not
Hem XAML özniteliklerini Handles
hem de aynı olay işleyicisini aynı olaya eklemek için kullanmayın, aksi takdirde olay işleyicisi her olay için iki kez çağrılır.
Sınırlamalar
Handles anahtar sözcüğü şu kullanım sınırlamalarına sahiptir:
Yalnızca olay nesnenin sınıfının veya temel sınıfının üyesiyse bir nesneye olay işleyicisi eklemek için kullanabilirsiniz
Handles
. Örneğin, temel sınıfı ButtonBase yönlendirilen olayı yükseltenClick
bir düğmeye olay işleyicisi eklemek Click için kullanabilirsinizHandles
. Ancak, yönlendirilen olayların özelliklerinden biri, öğe ağacından geçmeleridir ve bu da olayıClick
yükselten öğeden daha yüksek bir düzeyde dinlemeyi ve işlemeyi mümkün kılar. Üst öğenin dinleyip işlediği yönlendirilmiş bir olay, ekli olay olarak adlandırılır.Handles
ekli olaylar için kullanılamaz çünkü söz dizimi XAML öğesi ağacında olayı tetikleyen öğeden farklı bir dinleyici belirtmeyi desteklemez. Ekli olaylar için olay işleyicileri atamak için XAML öznitelik söz dizimini AddHandler veya yöntemini kullanmanız gerekir. Ekli olaylar hakkında daha fazla bilgi için bkz . Ekli olaylara genel bakış ve WPF'de ekli olaylar.Handles
söz dizimi olaylar için Handled olay işleyici çağrısını desteklemez. Olay işleyicinizin olaylar için çağrılmasını sağlamak içinHandled
yöntemini kullanarak olay işleyicisini AddHandler(RoutedEvent, Delegate, Boolean) ekleyin ve parametresinihandledEventsToo
olaraktrue
ayarlayın.
Ayrıca bkz.
.NET Desktop feedback