2009-07-03 2 views
5

Bitte lesen Sie THIS Post. Ich habe das gleiche Problem wie in diesem Beitrag beschrieben, aber ich versuche, in VB.net statt C# zu tun.Wie benutzerdefinierte Ereignisse für ein Benutzersteuerelement von vb.net winforms verfügbar machen und ausgelöst werden

Ich bin ziemlich sicher, dies zu tun, muss ich ein benutzerdefiniertes Ereignis verwenden. (Ich habe ein code conversion site zu bekommen über benutzerdefinierte Ereignisse zu lernen.) So in dem IDE, wenn ich schreibe folgend:

öffentliches Kundenspezifischer Ereignis AddRemoveAttendees Als Eventhandler

Es erweitert den folgenden Code-Schnipsel.

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 

Aber ich kann nicht herausfinden, was damit zu tun ist. Bis heute hatte ich noch nie von Sonderveranstaltungen gehört.

Die Quintessenz von dem, was ich möchte, ist das Click-Ereignis einer Schaltfläche Blase bis zum Container des Benutzersteuerelements. Ich weiß, dass ich meine eigene Veranstaltung einpacken könnte, aber ich würde gerne benutzerdefinierte Ereignisse verstehen, bevor ich weiter gehe.

Seth

Antwort

7

Um benutzerdefinierte Ereignisse zu verwenden, um die Ereignisse eines anderen Steuer sprudeln, können Sie wie folgt tun:

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 

In AddHandler und RemoveHandler Sie einfach den Anruf propagieren, um das gegebene Ereignis anhängen oder entfernen Handler zu/von der Kontrolle Click Ereignis.

Um ein wenig über die Verwendung von benutzerdefinierten Ereignissen zu erweitern, hier ist eine weitere beispielhafte Implementierung eines benutzerdefinierten Ereignisses:

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 

Nun, wie es oben aussieht, es tut kaum etwas anderes als ein normales Ereignis Erklärung:

Public Event AddRemoveAttendees As EventHandler 

Es bietet einen ähnlichen Mechanismus, mit dem Event-Handler angehängt und entfernt werden können und das Ereignis ausgelöst werden kann. Was das benutzerdefinierte Ereignis hinzufügt, ist eine zusätzliche Kontrollebene. Sie können etwas Code zum Hinzufügen, Entfernen und Erhöhen des Ereignisses schreiben, in dem Sie Regeln erzwingen und zwicken können, was ein bisschen passieren wird. Beispielsweise möchten Sie möglicherweise die Anzahl der Ereignishandler begrenzen, die an Ihr Ereignis angehängt sind. Um das zu erreichen, dass Sie den AddHandler Abschnitt aus der Probe oben verändern können:

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

Wenn Sie nicht diese Art von detaillierter Kontrolle benötigen, sehe ich keine Notwendigkeit, benutzerdefinierte Ereignisse zu erklären.

5

Wenn Sie das gleiche wie in den anderen Post wollen Sie erwähnt, ist hier die VB.NET-Äquivalent:

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 

Aber ich glaube nicht, das ist eine gute Idee, weil der sender Parameter des Ereignisses wird die Button, nicht Ihre UserControl ...

Stattdessen könnten Sie zum Button.Click Ereignis abonnieren und Sie eigene Veranstaltung erhöhen (ohne explizite Accessoren)

+0

Vielen Dank für Ihre Antwort ... ich habe die Antwortflagge zum fi erste Post für seine Gründlichkeit, aber Upvoted Ihre Antwort. Ich habe beschlossen, das Steuerelement in Standarddelegaten und -Ereignissen innerhalb des Steuerelements zu verpacken, so dass das Benutzersteuerelement die Ereignisse eher als das CHILC-Steuerelement ausgibt ... laut Vorschlag. Vielen Dank. Seth –

Verwandte Themen