VB.NET Qual è il Mittente utilizzato per?

Non ho capito lo scopo del sender parametro in Winform controlli, per esempio:

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

End Sub

Capisco che può verificare che cosa sender detiene facendo qualcosa di così:

If TypeOf sender Is Label Then
 'Execute some code...
End If

Ma c’è una buona ragione per cui mittente è incluso in ogni singolo controllo quando si genera il sub-routine per me? In altre parole, faccio doppio clic su una Forma e ho il Private Sub form_load (sender....) e e As System.EventArgs.

Quali sono alcuni di uso comune di questi due parametri? Sono sempre necessari?

Grazie,

Dayan D.

OriginaleL’autore Dayan | 2012-07-29

3 Replies
  1. 16

    sender contiene il mittente dell’evento, così se si ha un metodo associato a più controlli, si è in grado di distinguerli.

    Per esempio, se avessi dieci pulsanti e volevo cambiare il loro testo “Hai cliccato su di me!” quando si fa clic su uno di essi, si potrebbe utilizzare un gestore separata per ciascuno di essi utilizzando un pulsante diverso nome ogni volta, ma sarebbe molto meglio per gestire tutte in una volta:

    Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, Button5.Click, Button6.Click, Button7.Click, Button8.Click, Button9.Click
        DirectCast(sender, Button).Text = "You clicked me!"
    End Sub
    La ringrazio molto minitech, risposta molto veloce! Perché stai usando DirectCast per la conversione in arrivo (mittente) a un pulsante, non possiamo assumere un pulsante dal vostro Maniglie riflettere su Button1.Fare clic su tutti i modi, fino a Button9.Fare clic su? O si fa riferimento a qualcosa d’altro che mi sono perso 😉 Grazie!
    Sto usando DirectCast perché sender è dichiarata come Object (che è solo il modo in cui i gestori di eventi di lavoro) e posso supporre che sia una Button, in modo che è perché io sono il casting, senza controlli. Se il codice senza Option Strict On, poi è compilare l’utilizzo di sender.Text, ma sarà più lento, e la ricerca di errori sarà più difficile in seguito. (Suggerimento: girare Sempre Option Strict On! È nelle vostre impostazioni.)
    Sono diventato abituare di Option Strict On, ma grazie per il suggerimento e la risposta chiara.

    OriginaleL’autore Ry-

  2. 5

    e si riferisce ad argomenti dell’evento per il caso, essi sono generalmente in forma di proprietà/funzioni/metodi di arrivare a essere disponibile su di esso.

    In questo esempio, l’etichetta di proprietà di testo conterrà il BorderColor set per il piè di pagina lo stile della nostra GridView quando il suo FooterRow, determinato dalla riga inviata come una proprietà su argomenti dell’evento parametro, associa i dati con il GridView DataSource.

    Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
            If e.Row.RowType = DataControlRowType.Footer Then
                lblFooterColor.Text = e.Row.Style("BorderColor")
            End If
    End Sub
    Grande risposta per il mio 2 ° semestre la domanda CoderRoller, la ringrazio molto!
    Sempre I Benvenuti Intrus

    OriginaleL’autore CoderRoller

  3. 1

    Per la prima metà della domanda:

    sender è utilizzato quando la richiamata nella gestione di più eventi, per sapere quale oggetto ha fatto fuoco all’evento.

    Per esempio, invece di taglia-e-incolla lo stesso codice in due funzioni di callback, si può avere lo stesso codice di gestire due diversi pulsante fare clic su eventi:

    Private Sub Button_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
       Dim s As String
       If sender Is Button1 Then
          s = "button1"
       ElseIf sender Is Button2 Then
          s = "button2"
       End If
       MessageBox.Show("You pressed: " + s)
    End Sub

    Di riferimento qui.

    OriginaleL’autore Zac

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *