2009-08-19 19 views
72

Che cosa significano/si riferiscono a mittente e evento? Come posso utilizzarli (per lo scenario seguente)?Eventi .NET - Cosa sono gli oggetti mittente e EventArgs e?

Scenario:

che sto cercando di costruire un controllo personalizzato con una funzione di eliminazione, e voglio essere in grado di eliminare il controllo che è stato cliccato su una pagina che contiene molti degli stessi controllo personalizzato.

+0

@rogerdeuce, abbiamo riscontrato questo problema su un progetto ASP.net C#, quindi è contrassegnato come C#. Ho aggiunto anche il tag vb in base ai commenti di modifica. – stringo0

risposta

77

Il mittente è il controllo dell'azione (ad esempio OnClick, è il pulsante).

Gli EventArgs sono argomenti che l'implementatore di questo evento può trovare utili. Con OnClick non contiene nulla di buono, ma in alcuni eventi, come ad esempio in GridView 'SelectedIndexChanged', conterrà il nuovo indice, o alcuni altri dati utili.

quello che Chris sta dicendo è che si può fare questo:

protected void someButton_Click (object sender, EventArgs ea) 
{ 
    Button someButton = sender as Button; 
    if(someButton != null) 
    { 
     someButton.Text = "I was clicked!"; 
    } 
} 
+4

Grazie! Ti dispiacerebbe espandere gli eventargs o fornire un collegamento su di essi? Ad esempio, posso passare un valore stringa attraverso eventargs? Se é cosi, come? – stringo0

+5

Beh, "tu" sei la classe che invia l'evento. Quindi tipicamente si sottoclasse 'EventArgs' con il proprio 'MyControlsEventEventArgs' e quindi si impostano le proprietà su quello per ciò che si desidera passare. Quindi metti le cose qui solo quando scrivi il controllo che invia l'evento. Se si desidera inserire un valore stringa nel * pulsante * in genere si utilizza il campo "CommandArgument", a cui è possibile accedere lanciando il mittente su "Pulsante" (come nel mio post). –

7

manualmente gettato il mittente al tipo di controllo personalizzato, e poi usarlo per eliminare o disattivare ecc Ad esempio, qualcosa di simile:

private void myCustomControl_Click(object sender, EventArgs e) 
{ 
    ((MyCustomControl)sender).DoWhatever(); 
} 

Il 'mittente' è proprio l'oggetto che è stato azionato (es. cliccato).

L'evento args è suddiviso in sottoclassi per controlli più complessi, ad esempio una vista ad albero, in modo da poter conoscere maggiori dettagli sull'evento, ad esempio esattamente dove hanno fatto clic.

+0

Potresti espanderti un po '? Come posso elaborare il mittente/eventargs? Non sono abituato a usarli. – stringo0

+0

@ stringo0 mittente è l'oggetto che ha generato l'evento (chiama il delegato dell'evento passando 'questo' per convenzione). EventArgs, se non sottoclasse, è completamente ** non utilizza **. Quindi, a meno che tu non abbia un parametro SelectedIndexEventArgs o CancelEventArgs, non puoi fare nulla. Se non sei abituato a usarli, semplicemente non ne hai bisogno, ma li richiedi nella firma del metodo. Quindi puoi semplicemente ignorarli. Se scrivi un lambda per gestire gli eventi non hai nemmeno bisogno di scrivere i nomi di questi argomenti –

19

sender si riferisce all'oggetto che ha richiamato l'evento che ha attivato il gestore di eventi. Questo è utile se hai molti oggetti che usano lo stesso gestore di eventi.

EventArgs è una sorta di classe base fittizia. Di per sé è più o meno inutile, ma se ne deriva, puoi aggiungere tutti i dati necessari per passare ai gestori di eventi.

Quando si implementano i propri eventi, utilizzare uno EventHandler o EventHandler<T> come tipo. Questo garantisce che avrai esattamente questi due parametri per tutti i tuoi eventi (che è una buona cosa).

5
  1. 'mittente' viene chiamato oggetto che ha una certa azione eseguire su alcuni controllo

  2. 'evento' relativo avere alcune informazioni circa il controllo che ha qualche behavoiur e l'identità eseguire da alcuni user.quando l'azione sarà generando occorrenza per l'evento aggiungi che si mantiene all'interno dell'array si chiama evento agrs

Problemi correlati