Ereignisse eines externen Objekts in C # auslösen

7

Wenn actions ein Panel ist, kann ich das Click -Ereignis des Elternteils erhöhen? Ich habe diesen Code im Moment, aber das Click -Ereignis ist keine Methode, daher ist dieser Code ungültig.
Weiß jemand, wie ich das erreichen kann?

%Vor%     
anonymous coward 26.04.2009, 07:06
quelle

5 Antworten

9

Es ist nicht möglich, ein C # event direkt von einem anderen class zu erzeugen (auch wenn es public ist). Sie könnten eine Methode (mit einem ausreichenden Zugriffsmodifikator) bereitstellen, die die event für Sie erhöht und diese Methode in der anderen class aufruft.

Das ist übrigens mit Reflektion möglich, aber ich halte das für einen schmutzigen Hack.

    
Mehrdad Afshari 26.04.2009, 07:10
quelle
6

Die meisten Typen in der CLR, die Ereignisse auslöst, verfügen über eine geschützte On [EventName] -Methode, die dafür sorgt, dass das Ereignis ausgelöst wird. Sie können diese geschützte Methode "von außen" mit Reflection aufrufen:

%Vor%     
Fredrik Mörk 26.04.2009 07:26
quelle
2

Ich habe dies mithilfe von Reflection- und Extension-Methoden implementiert, so dass ich (in diesem Fall) einfach ein LinkLabel click -Ereignis aufrufen kann, indem ich einfach Folgendes aufrufe:

%Vor%

Die Methode click () ist eine C # -Erweiterungsmethode:

%Vor%

verwendet eine andere Erweiterungsmethode für:

  • Erhalte eine private Eigenschaft vom LinkLabel (benötigt um das LinkLabelLinkClickedEventArgs Objekt zu erstellen)
  • ruft die OnLinkClicked-Methode auf (die das Ereignis auslöst
  • )
Dinis Cruz 07.02.2010 23:58
quelle
1

Je nachdem, welches Framework Sie verwenden, müssen Sie das Click-Ereignis auf dem übergeordneten Element WPF und ASP.NET zum Beispiel bubble löst den Elementbaum auf.

Wenn das keine Option ist, können Sie tun, wie Mehrdad es vorschlägt.

    
MichaC 26.04.2009 07:19
quelle
1

Der einzige Grund, warum ich mir vorstellen kann, warum Sie das Click-Ereignis auslösen möchten, ist, wenn Sie Benutzereingaben simulieren. Arbeiten Sie an einem automatisierten Testtreiber oder etwas ähnlichem? Wenn dies der Fall ist, kann es bessere Lösungen geben, als den Code mit Nur-Test-Hilfsmethoden zu belasten. Das kommt zuerst in Google, ich habe keine Ahnung, ob es gut ist.

Wenn Sie dies als eine Art Flusskontrolle in Ihrer Anwendung selbst versuchen, würde ich einen Schritt zurückgehen, um zu sehen, ob das überhaupt richtig ist - es riecht irgendwie "schlecht".

    
David Pope 26.04.2009 20:20
quelle

Tags und Links