.NET-Ereignisse - Was sind Objektabsender und EventArgs e?

78

Was bedeuten Absender und eventArgs? Wie kann ich sie nutzen (für das folgende Szenario)?

Szenario:

Ich versuche, ein benutzerdefiniertes Steuerelement mit einer Löschfunktion zu erstellen, und ich möchte das Steuerelement löschen können, auf das auf einer Seite geklickt wurde, die viele der gleichen benutzerdefinierten Steuerelemente enthält.

stringo0
quelle
1
@rogerdeuce, wir haben dieses Problem in einem ASP.net c # -Projekt festgestellt, daher ist es als c # gekennzeichnet. Ich habe das vb-Tag auch basierend auf Ihren Bearbeitungskommentaren hinzugefügt.
stringo0

Antworten:

86

Der Absender ist das Steuerelement, für das die Aktion bestimmt ist (z. B. OnClick, es ist die Schaltfläche).

Die EventArgs sind Argumente, die der Implementierer dieses Ereignisses möglicherweise nützlich findet. Mit OnClick enthält es nichts Gutes, aber in einigen Fällen, wie beispielsweise in einer GridView 'SelectedIndexChanged', enthält es den neuen Index oder andere nützliche Daten.

Was Chris sagt, ist, dass Sie dies tun können:

protected void someButton_Click (object sender, EventArgs ea)
{
    Button someButton = sender as Button;
    if(someButton != null)
    {
        someButton.Text = "I was clicked!";
    }
}
Mittags Seide
quelle
4
Vielen Dank! Würde es Ihnen etwas ausmachen, Eventargs zu erweitern oder einen Link dazu bereitzustellen? Kann ich beispielsweise einen Zeichenfolgenwert über eventargs übergeben? Wenn das so ist, wie?
stringo0
5
Nun, "Sie" sind die Klasse, die das Ereignis sendet. Normalerweise unterteilen Sie 'EventArgs' mit Ihren eigenen 'MyControlsEventEventArgs' und legen dann Eigenschaften für das fest, was Sie übergeben möchten. Sie fügen hier also nur Dinge ein, wenn Sie das Steuerelement schreiben, das das Ereignis sendet. Wenn Sie einen Zeichenfolgenwert in die Schaltfläche einfügen möchten, verwenden Sie normalerweise das Feld 'CommandArgument', auf das Sie zugreifen können, indem Sie den Absender auf ' Schaltfläche ' setzen (wie in meinem Beitrag).
Mittag Seide
21

senderbezieht sich auf das Objekt, das das Ereignis aufgerufen hat, das den Ereignishandler ausgelöst hat. Dies ist nützlich, wenn Sie viele Objekte haben, die denselben Ereignishandler verwenden.

EventArgsist so etwas wie eine Dummy-Basisklasse. An und für sich ist es mehr oder weniger nutzlos, aber wenn Sie daraus ableiten, können Sie alle Daten hinzufügen, die Sie an Ihre Event-Handler übergeben müssen.

Wenn Sie Ihre eigenen Ereignisse implementieren, verwenden Sie ein EventHandleroder EventHandler<T>als deren Typ. Dies garantiert, dass Sie genau diese beiden Parameter für alle Ihre Veranstaltungen haben (was eine gute Sache ist).

Matthew Scharley
quelle
8

Verwandeln Sie den Absender manuell in den Typ Ihres benutzerdefinierten Steuerelements und verwenden Sie ihn dann zum Löschen oder Deaktivieren usw. Beispiel: So etwas:

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

Der 'Absender' ist nur das Objekt, das bearbeitet wurde (z. B. geklickt).

Die Ereignisargumente werden für komplexere Steuerelemente, z. B. eine Baumansicht, in Unterklassen unterteilt, damit Sie mehr Details über das Ereignis erfahren können, z. B. genau, wo sie angeklickt haben.

Chris
quelle
Könnten Sie das etwas näher erläutern? Wie verarbeite ich Absender / Eventargs? Ich bin es nicht gewohnt, sie zu benutzen.
stringo0
@ stringo0 sender ist das Objekt, das das Ereignis ausgelöst hat (es ruft den Ereignisdelegierten auf, indem es 'this' gemäß Konvention übergibt). EventArgs, wenn nicht unterklassiert, ist völlig unbrauchbar . Wenn Sie also keinen SelectedIndexEventArgs-Parameter oder CancelEventArgs haben, können Sie nichts tun. Wenn Sie nicht daran gewöhnt sind, sie zu verwenden, brauchen Sie sie einfach nicht, aber Sie benötigen sie in der Methodensignatur. Sie können sie also einfach ignorieren. Wenn Sie ein Lambda schreiben, um Ereignisse zu behandeln, müssen Sie nicht einmal die Namen dieser Argumente schreiben
usr-local-ΕΨΗΕΛΩΝ
5
  1. 'Absender' wird als Objekt bezeichnet, bei dem eine Aktion für ein Steuerelement ausgeführt wird

  2. 'event' enthält einige Informationen über die Steuerung, deren Verhalten und Identität von einem Benutzer ausgeführt wird. Wenn eine Aktion durch Auftreten eines Ereignisses generiert wird, wird das Hinzufügen innerhalb des Arrays als event agrs bezeichnet

Rajeev Kumar Singh
quelle