2009-07-03 12 views
5

Proszę przeczytać THIS post. Mam taki sam problem, jak opisano w tym poście, ale próbuję zrobić w VB.net zamiast C#.Jak wyświetlać i wywoływać zdarzenia niestandardowe dla kontrolki użytkownika WinFity vb.net

Jestem prawie pewien, że muszę to zrobić. Muszę użyć niestandardowego wydarzenia. (Użyłem code conversion site aby dowiedzieć się o niestandardowych zdarzeń.) Więc w IDE kiedy wpisz:

AddRemoveAttendees Public Niestandardowe zdarzenia jako EventHandler

rozszerza się poniższym fragmencie kodu.

Public Custom Event AddRemoveAttendees As EventHandler 
    AddHandler(ByVal value As EventHandler) 

    End AddHandler 

    RemoveHandler(ByVal value As EventHandler) 

    End RemoveHandler 

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs) 

    End RaiseEvent 
End Event 

Ale nie mogę wymyślić, co z tym zrobić. Do dzisiaj nigdy nie słyszałem o niestandardowych wydarzeniach.

Najważniejsze jest to, aby zdarzenie click przycisku z dymkiem skierowało się do kontenera kontrolki użytkownika. Wiem, że mógłbym zawrzeć moje własne wydarzenie, ale chciałbym przynajmniej zrozumieć zdarzenia niestandardowe, zanim pójdę dalej tą drogą.

Seth

Odpowiedz

7

Aby użyć niestandardowych zdarzeń dla propagacji wydarzenia z innej kontroli, można zrobić tak:

Public Custom Event AddRemoveAttendees As EventHandler 
    AddHandler(ByVal value As EventHandler) 
     AddHandler _theButton.Click, value 
    End AddHandler 

    RemoveHandler(ByVal value As EventHandler) 
     RemoveHandler _theButton.Click, value 
    End RemoveHandler 

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs) 
     ' no need to do anything in here since you will actually ' 
     ' not raise this event; it only acts as a "placeholder" for the ' 
     ' buttons click event ' 
    End RaiseEvent 
End Event 

W AddHandler i RemoveHandler wystarczy propagować połączenia dołączyć lub usunąć daną imprezę handler do/z zdarzenia kontrolnego Click.

Aby rozwinąć trochę na temat korzystania z niestandardowych zdarzeń, oto kolejna realizacja próbka zdarzenia niestandardowego:

Dim _handlers As New List(Of EventHandler) 
Public Custom Event AddRemoveAttendees As EventHandler 

    AddHandler(ByVal value As EventHandler) 
     _handlers.Add(value) 
    End AddHandler 

    RemoveHandler(ByVal value As EventHandler) 
     If _handlers.Contains(value) Then 
      _handlers.Remove(value) 
     End If 
    End RemoveHandler 

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs) 
     For Each handler As EventHandler In _handlers 
      Try 
       handler.Invoke(sender, e) 
      Catch ex As Exception 
       Debug.WriteLine("Exception while invoking event handler: " & ex.ToString()) 
      End Try 
     Next 
    End RaiseEvent 
End Event 

Teraz, jak to wygląda powyżej, to jednak niewiele więcej niż zwykły deklaracji zdarzenia:

Public Event AddRemoveAttendees As EventHandler 

Udostępnia podobny mechanizm umożliwiający dołączanie i usuwanie programów obsługi zdarzeń oraz wydarzenie. To, co dodaje niestandardowe wydarzenie, zapewnia dodatkowy poziom kontroli; możesz napisać kod na temat dodawania, usuwania i podnoszenia wydarzenia, w którym możesz wymuszać zasady i modyfikować to, co się stanie. Na przykład możesz chcieć ograniczyć liczbę programów obsługi zdarzeń dołączonych do wydarzenia. Aby to osiągnąć można zmienić sekcję AddHandler z próbki powyżej:

AddHandler(ByVal value As EventHandler) 
     If _handlers.Count < 8 Then 
      _handlers.Add(value) 
     End If 
    End AddHandler 

Jeśli nie potrzebują tego rodzaju szczegółowej kontroli, nie widzę potrzeby deklarowania niestandardowych zdarzeń.

5

Jeśli chcesz tak samo jak w drugim poście masz wymieniono tutaj jest równoważne VB.NET:

Public Custom Event AddRemoveAttendees As EventHandler 

    AddHandler(ByVal value As EventHandler) 
     AddHandler SaveButton.Click, value 
    End AddHandler 

    RemoveHandler(ByVal value As EventHandler) 
     RemoveHandler SaveButton.Click, value 
    End RemoveHandler 

End Event 

Ale nie sądzę, że to dobry pomysł, ponieważ parametr zdarzenia sender będzie Button, nie Twój UserControl ...

Zamiast tego, można zapisać się do wydarzenia Button.Click i podnieść jesteś właścicielem zdarzenie (bez wyraźnych dostępowych)

+0

Dzięki za odpowiedź ... dałem odbierz flagę do fi pierwszy post za jego dokładność, ale przegłosował twoją odpowiedź. Zdecydowałem się zawrzeć kontrolę w standardowych delegatach i zdarzeniach wewnątrz kontrolki, aby kontrola użytkownika wyemitowała zdarzenia, a nie sterowanie chilc ... zgodnie z sugestią użytkownika. Dzięki. Seth –

Powiązane problemy