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.

Önemli

.NET 7 ve .NET 6 için Masaüstü Kılavuzu belgeleri yapım aşamasındadır.

Ön koş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 Handlesbir 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 WithEventstüm XAML öğelerini otomatik olarak bildirir. Aşağıdaki örnekte kullanarak WithEventsarka 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.

Bahşiş

ile Handleseklenen 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 Namex: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 Handlesbir 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 WithEventsbildirilir. Sonuç olarak, ile Handlesherhangi bir XAML öğesini kullanabilirsiniz.

Bahşiş

Visual Studio IntelliSense ile Handleskullanılabilecek nesneleri gösterir.

kullanarak bir olay işleyicisi Handleseklemenize bakılmaksızın, XAML özniteliği söz dizimi, AddHandler deyimi veya AddHandler yöntemi, olay sistemi davranışı aynıdır.

Dekont

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ükselten Click 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çin Handled yöntemini kullanarak olay işleyicisini AddHandler(RoutedEvent, Delegate, Boolean) ekleyin ve parametresini handledEventsToo olarak trueayarlayın.

Ayrıca bkz.