2012-04-12 4 views
0

ich einen Event-Handler von einem anderen Aufruf:Ist das Übergeben eines EventArg um Ereignishandler potenziell gefährlich?

private void launchApplicationToolStripMenuItem_Click(object sender, EventArgs e) { 
      listApplications_DoubleClick(listApplications, null); 
     } 

     private void listApplications_DoubleClick(object sender, EventArgs e) { 

"listApplications" ein Listview ist.

Ich musste listApplications übergeben, weil ich den Absender im DoubleClick() - Ereignis in eine ListView umwandelte.

Was ist mit dem zweiten arg, obwohl? Soll ich übergeben null, wie oben gezeigt, oder sollte ich pass „e“ wie folgt:

listApplications_DoubleClick(listApplications, e); 

Beide Wege funktionieren/gleich unter guten Umständen. Ich weiß nicht, ob das der Fall wäre, wenn es eine Ausnahme gäbe ...

+4

Darf ich vorschlagen, stattdessen eine dritte Methode zu erstellen, deren Name beschreibt, was * tatsächlich passieren wird * und dann jeden Ihrer Event-Handler aufrufen lässt? Das wird für viel klareren Code sorgen. –

Antwort

1

Nun, ich würde nicht genau sagen, gefährlich, aber es kann einige Probleme verursachen, z. B. Ausnahmen, wenn sie nicht ordnungsgemäß behandelt werden. In Ihrem Beispiel ist ein Ereignis ein Klickereignis und das andere ist ein Doppelklickereignis, was impliziert, dass das EventArgs-Objekt, e, tatsächlich ein MouseEventArgs ist. Das ist gut, denn dann müssen Sie sich keine Sorgen darüber machen, dass der zweite Event-Handler auf inexistente Mitglieder von e.

Nehmen wir nun an, Sie möchten das Paint-Ereignis aufrufen, wenn der Benutzer beispielsweise auf eine Schaltfläche klickt. In diesem Fall ruft das click-Ereignis das Paint-Ereignis auf. Jetzt ist das Problem: Das Paint-Ereignis erwartet ein PaintEventArgs, also könnte das Übergeben eines MouseEventArgs eine Ausnahme verursachen. Wenn Sie beide Codeteile kontrollieren, können Sie natürlich selbst überprüfen, ob es einen Zugriff auf ein PaintEventArgs-Mitglied gibt. Wenn nicht, dann geht es Ihnen gut, obwohl ich in diesem Szenario sowieso keinen Sinn darin sehe, die Argumente zu übergeben.

Ich hoffe, das war nicht zu verwirrend.

1

Wenn Sie einen Event-Handler eines identischen Events aufrufen (dh wenn Sie ein DoubleClick-Event von einem anderen DoubleClick-Event aufrufen) Sie sollten Ereignisargumente zu ihm übergeben. Ereignisargumente enthalten wichtige Informationen zum Doppelklick, zum Beispiel seine Position. Wenn der Handler "down the chain" diese Argumente nicht interessiert, verursacht die Übergabe null kein Problem; Sie sollten jedoch nicht annehmen, dass der Aufrufer, den Sie aufrufen, das Argument ignoriert und etwas Gültiges an es übergeben.

Hier ist an example von, wie Sie Ereignisargumente verwenden können, um die Position des doubleclick herauszufinden.

1

Nein, ist EventArg vorbei nicht gefährlich bis es sei denn, Sie nicht ein Verfahren listApplications_DoubleClick (object sender, EventArgs e) verwendet werden Körper .. es ist in Ordnung null zu schicken,

Verwandte Themen