Laden...

.NET Event mit eigener EventArgs-Klasse

Erstellt von BillTuer vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.454 Views
B
BillTuer Themenstarter:in
325 Beiträge seit 2005
vor 15 Jahren
.NET Event mit eigener EventArgs-Klasse

Ich habe einige BitmapPictures, bei denen ich auf das DownloadCompleted Event reagieren möchte.


picture.DownloadCompleted += picture_DownloadCompleted;


private void picture_DownloadCompleted(object sender, EventArgs e)
{
    BitmapImage picture = sender as BitmapImage;
    .
    .
    .
}

Nun weiß ich durch das Casten von sender, welches Bild gerade fertig geladen worden ist. Allerdings würde ich irgendwie in dem EventArgs noch weitere Infos mit übergeben, die nicht direkt mit dem Bild zusammenhängen.

Nun dachte ich mir, dass ich einfach eine eigene EventArgs Klasse schreibe, die ich von EventArgs ableite und dann meiner Event-Methode übergebe.


picture.DownloadCompleted += picture_DownloadCompleted(picture, new PictureDownloadedArgs(param));

private void picture_DownloadCompleted(object sender, PictureDownloadedArgs e)
{
    ...
}

Dies klappt allerdings nicht, da er meine Methode nicht von void nach EventHandler casten kann.
Bin ich völlig auf dem falschen Weg oder übersehe ich nur eine "Kleinigkeit"?
Wie kann ich denn sonst in EventArgs Informationen mitgeben, wenn das Event nicht von mir selbst erstellt worden ist?

Vielen Dank!

2.082 Beiträge seit 2005
vor 15 Jahren

Hall BillTuer,

bitte erst die Suche verwenden...

FAQ: Eigenen Event definieren

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

B
BillTuer Themenstarter:in
325 Beiträge seit 2005
vor 15 Jahren

Aber ich will doch gar nicht einen eigenen Event definieren, sondern einem bestehenden einen Parameter mitgeben.

2.082 Beiträge seit 2005
vor 15 Jahren

Im FAQ steht folgender Satz:

Mit eigenen EventArgs (ab .NET 2.0): [Lösung] Problem mit EventHandler

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

Gelöschter Account
vor 15 Jahren

alle antworten findest du sehr gut erklärt hier:

			[Guide to C# -> Styleguide -> Events](http://www.guidetocsharp.de/StyleGuideEvents.aspx)
B
BillTuer Themenstarter:in
325 Beiträge seit 2005
vor 15 Jahren

Diesen Thread kenne ich und habe daher auch meine EventArgs Klasse.


public class PictureDownloadedArgs : EventArgs
    {
        public int Index { get; protected set; }

        public PictureDownloadedArgs(int index)
        {
            Index = index;
        }
    }

Diese möchte ich aber jetzt mit dem DownloadCompleted Event von BitmapImage benutzen.
Stehe ich so stark auf dem Schlauch?

2.082 Beiträge seit 2005
vor 15 Jahren

Äh...

public event EventHandler<PictureDownloadedArgs > DownloadCompleted;

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

F
240 Beiträge seit 2006
vor 15 Jahren

Wenn picture.DownloadCompleted eine Methode mit der Signatur void(object, EventArgs) erfordert, kannst du auch nur eine solche dem delegate hinzufügen.

B
BillTuer Themenstarter:in
325 Beiträge seit 2005
vor 15 Jahren

Um einem Ereignis weitere Daten zu übergeben, erzeugen Sie ein Objekt der Klasse EventArgs oder einer davon abgeleiteten Klasse und übergeben Sie dieses Objekt der ereignisauslösenden Methode. Erzeugen Sie dieses Objekt nicht erst in der ereignisauslösenden Methode.

Genau das versuche ich ja.


public event EventHandler<PictureDownloadedArgs > DownloadCompleted;

Die Klasse BitmapImage stammt aus dem .NET Framework und nicht von mir.

Wenn picture.DownloadCompleted eine Methode mit der Signatur void(object, EventArgs) erfordert, kannst du auch nur eine solche dem delegate hinzufügen.

Und es gibt keine Möglichkeit, einfach EventArgs irgendwelche Parameter mitzugeben?

2.082 Beiträge seit 2005
vor 15 Jahren

Die Klasse BitmapImage stammt aus dem .NET Framework und nicht von mir. Dann wohl eine eigene Klasse erstellen und ableiten.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

L
770 Beiträge seit 2006
vor 15 Jahren

Hallo,
stell die Infos doch einfach ins TAG Element.. für sowas ist es doch gut brauchbar, oder nicht?

lg Lion

Edit: Okay, gibt es nicht, zumindest hab ich es nicht gefunden, sorry

lg Lion

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo BillTuer,

das was Du vorhast kann so nicht funktionieren. Schaue Dir doch mal an, was passieren muss, wenn Du Deinen eigens definierten Event feuern möchtest. Normalerweise machst Du dann etwas in folgender Art:



// hier möchtest Du das Event feuern, also 
OnMyOwnEventRaise(myEventArgsValue);

// ...

// hier wird die geschützte Methode definiert, die tatsächlich das Event feuert
protected void OnMyOwnEventRaise(int myEventArgsValue)
{
   PictureDownloadedArgs pda = null;

   if (myOwnEvent != null)
   {
      pda = new PictureDownloadedArgs(myEventArgsValue);
      myOwnEvent(pda);
   }
}


Soo, nun stell Dir vor Du verwendest eine schon fertige Klasse, aber möchtest Deine eigene EventArguments verwenden: Wie übergibst Du nun Deine EventArgs der schon fertigen Klasse, die für sich selbst nur die bekannten EventArgs erzeugt und verwendet?

Wenn Du Herr über Deine EventArgs sein möchtest, dann musst Du auch Herr über ein eigenes Event sein, und auch das Event selbst auslösen.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo BillTuer,

es ist wie norman_timo sagt. Es geht einfach nicht.

Es ist aber auch nie nötig, bestehenden Events weitere Informationen mitzugeben.

herbivore