2009-07-03 3 views
5

Leggere il numero THIS. Ho lo stesso problema descritto in questo post, ma sto cercando di farlo in VB.net piuttosto che in C#.Come esporre e aumentare eventi personalizzati per un controllo utente winforms vb.net

Sono sicuro di farlo, devo utilizzare un evento personalizzato. (Io ho usato un code conversion site per arrivare a conoscere gli eventi personalizzati.) Quindi nell'IDE quando si digita il seguente:

AddRemoveAttendees pubblico Custom Event Come EventHandler

si espande per il seguente frammento di codice.

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 

Ma non riesco a capire cosa fare con esso. Fino ad oggi non avevo mai sentito parlare di eventi personalizzati.

La linea di fondo di ciò che voglio è avere l'evento click di un pulsante fino al contenitore del controllo utente. So che potrei concludere il mio evento, ma vorrei almeno capire gli eventi personalizzati prima di andare più avanti.

Seth

risposta

7

Per utilizzare eventi personalizzati per spumeggiante gli eventi di un altro controllo, si può fare in questo modo:

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 e RemoveHandler semplicemente propagare la chiamata per fissare o rimuovere l'evento data gestore da/per l'evento Click del controllo.

Per espandere un po 'sull'uso di eventi personalizzati, qui è un altro esempio di implementazione di un evento personalizzato:

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 

Ora, come sembra in precedenza, lo fa poco altro che una dichiarazione di evento regolare:

Fornisce un meccanismo simile che consente di collegare e rimuovere gli event handler e di sollevare l'evento. Ciò che l'evento personalizzato aggiunge è un ulteriore livello di controllo; devi scrivere del codice per aggiungere, rimuovere e innalzare l'evento, in cui puoi applicare le regole e modificare ciò che accadrà un po '. Ad esempio, potresti voler limitare il numero di gestori di eventi che sono collegati al tuo evento. Per ottenere che è possibile modificare la sezione AddHandler dal campione di cui sopra:

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

Se non avete bisogno di quel tipo di controllo dettagliato, non vedo la necessità di dichiarare gli eventi personalizzati.

5

Se si desidera che la stessa cosa in un altro post che menzionate, ecco l'equivalente 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 

Ma io non credo che sia una buona idea, perché il parametro sender della manifestazione sarà la Button, non il vostro UserControl ...

Invece, si potrebbe sottoscrivere l'evento Button.Click e si alza proprio evento (senza funzioni di accesso espliciti)

+0

Grazie per la risposta ... ho dato il risposta flag al fi primo post per la sua completezza, ma ha messo in risalto la tua risposta. Ho deciso di avvolgere il controllo in delegati e eventi standard all'interno del controllo in modo che il controllo utente emetta gli eventi anziché il controllo chilc ... secondo i vostri suggerimenti. Grazie. Seth –