2009-08-19 3 views
72

Was bedeuten Absender und eventArgs? Wie kann ich sie nutzen (für das Szenario unten)?.NET Events - Was sind Objekt Absender & EventArgs e?

Szenario:

Ich versuche, eine benutzerdefinierte Steuerung mit einer Löschfunktion zu bauen, und ich möchte in der Lage, die Kontrolle zu löschen, die auf einer Seite geklickt wurde, dass viele der gleichen benutzerdefinierten Steuerelement enthält.

+0

@rogerdeuce, dieses Problem trat bei einem ASP.net C# -Projekt auf, daher ist es als C# gekennzeichnet. Ich habe das vb-Tag auch hinzugefügt, basierend auf deinen Kommentaren. – stringo0

Antwort

77

Der Absender ist das Steuerelement, für das die Aktion ist (sagen Sie OnClick, es ist die Schaltfläche).

Die EventArgs sind Argumente, die der Implementierer dieses Ereignisses nützlich finden kann. Mit OnClick enthält es nichts Gutes, aber in einigen Ereignissen, wie in einem GridView 'SelectedIndexChanged', wird es den neuen Index oder einige andere nützliche Daten enthalten.

Was Chris sagt, ist, dies zu tun:

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

Danke! Würde es Ihnen etwas ausmachen, auf Eventargs zu expandieren oder einen Link zu ihnen zu erstellen? Kann ich beispielsweise einen String-Wert über eventargs übergeben? Wenn das so ist, wie? – stringo0

+5

Nun "Sie" sind die Klasse, die das Ereignis sendet. In der Regel werden Sie "EventArgs" mit Ihrem eigenen "MyControlsEventEventArgs" von der Unterklasse ableiten und dann Eigenschaften für das festlegen, was Sie weitergeben möchten. Sie schreiben also nur Dinge, wenn Sie das Steuerelement schreiben, das das Ereignis sendet. Wenn Sie einen String-Wert in die * -Schaltfläche eingeben möchten, verwenden Sie normalerweise das Feld 'CommandArgument', auf das Sie zugreifen können, indem Sie den Absender auf 'Button' (wie in meinem Beitrag) umwandeln. –

7

manuell warf den Absender auf die Art der benutzerdefinierte Kontrolle, und dann verwenden, zu löschen oder deaktivieren usw. Zum Beispiel, so etwas wie diese:

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

Der ‚Absender‘ ist nur das Objekt, das actioned wurde (zB geklickt).

Die Ereignisargumente sind für komplexere Steuerelemente, z. B. eine Baumansicht, unterklassifiziert, sodass Sie mehr Details über das Ereignis erfahren können, z. B. wo genau geklickt wurde.

+0

Könnten Sie das ein wenig erweitern? Wie verarbeite ich Absender/Ereignisargumente? Ich bin es nicht gewohnt, sie zu benutzen. – stringo0

+0

@ stringo0 sender ist das Objekt, das das Ereignis ausgelöst hat (es ruft den Ereignisdelegaten auf, indem er "dies" per Konvention übergibt). EventArgs, wenn nicht unterklassifiziert, ist total ** nutzlos **. Wenn Sie also keinen SelectedIndexEventArgs-Parameter oder CancelEventArgs haben, können Sie nichts tun. Wenn Sie es nicht gewohnt sind, sie zu verwenden, brauchen Sie sie einfach nicht, aber Sie benötigen sie in der Methodensignatur. Sie können sie einfach ignorieren. Wenn Sie ein Lambda schreiben, um Ereignisse zu behandeln, müssen Sie nicht einmal die Namen dieser Argumente schreiben –

19

sender verweist auf das Objekt, das das Ereignis aufgerufen wird, das den Event-Handler gefeuert. Dies ist nützlich, wenn Sie viele Objekte mit demselben Ereignishandler verwenden.

EventArgs ist so etwas wie eine Dummy-Basisklasse. An und für sich ist es mehr oder weniger nutzlos, aber wenn Sie daraus abgeleitet werden, können Sie alle Daten hinzufügen, die Sie an Ihre Event-Handler übergeben müssen. Wenn Sie eigene Ereignisse implementieren, verwenden Sie EventHandler oder EventHandler<T> als ihren Typ. Dies garantiert, dass Sie genau diese zwei Parameter für alle Ihre Events haben (was eine gute Sache ist).

5
  1. ‚Absender‘ Objekt aufgerufen wird, die eine Aktion durchführen, die einige behavoiur und Identität von einigen ausführen hat auf einige Kontrolle

  2. ‚Ereignis‘ seine mit ein paar Informationen über die Kontrolle hat user.when Aktion wird generiert durch das Auftreten für Ereignis hinzufügen es in Array bleiben heißt Ereignis agrs