Ich bin ein bisschen verwirrt. Ich weiß, dass ich eine von EventArgs abgeleitete Klasse erstellen kann, um benutzerdefinierte Ereignisdaten zu erhalten. Kann ich die EventArgs der Basisklasse irgendwie einsetzen? Wie beim Anklicken der Maustaste gibt es in der Teilnehmermethode immer den Parameter "EventArgs e". Kann ich irgendwie die Methode erstellen, die Daten auf diese Weise weitergibt, ich meine, sie werden in den Basis-Eventargs weitergegeben?Es ist möglich, Daten an EventArgs zu übergeben, ohne eine abgeleitete Klasse zu erstellen?
Antwort
Ist es möglich, einfach den EventArgs
Datentyp rough zu verwenden? Absolut. Laut MSDN:
This class contains no event data; it is used by events that do not pass state information to an event handler when an event is raised. If the event handler requires state information, the application must derive a class from this class to hold the data.
http://msdn.microsoft.com/en-us/library/system.eventargs.aspx
private event TestEventEventHandler TestEvent;
private delegate void TestEventEventHandler(EventArgs e);
private void button1_Click(object sender, EventArgs e)
{
TestEvent += TestEventHandler;
if (TestEvent != null)
{
TestEvent(new EventArgs());
}
}
private void TestEventHandler(EventArgs e)
{
System.Diagnostics.Trace.WriteLine("hi");
}
Sollten Sie jemals tun? Nicht aus irgendeinem Grund kann ich denken, wenn. Wenn Sie Ihre eigenen Klicks erstellen möchten, können Sie einfach die MouseEventArgs
auf Ihrem eigenen instanziiert auch:
MouseEventArgs m = new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 1, 42, 42, 1);
Nein. Die EventArgs-Basisklasse ist nur eine Möglichkeit, um einige Standard-Event-Delegate-Typen zuzulassen. Um Daten an einen Handler zu übergeben, müssen Sie EventArgs ableiten. Sie könnten stattdessen das Absenderarg verwenden, aber das sollte wirklich das Objekt sein, das das Ereignis ausgelöst hat.
Sie können die EventArgs-Klasse durch die generische Typen Ansatz. In diesem Beispiel werde ich die Rect-Klasse mit als Rückgabetyp verwenden:
public EventHandler<Rect> SizeRectChanged;
das das Ereignis auslöst:
if(SizeRectChanged != null){
Rect r = new Rect(0,0,0,0);
SizeRectChanged(this,r);
}
das Ereignis Zuhören:
anyElement.SizeRectChanged += OnSizeRectChanged;
public void OnSizeRectChanged(object sender, Rect e){
//TODO abything using the Rect class
e.Left = e.Top = e.Width = e.Height = 50;
}
also nicht brauchen Um neue Ereignisklassen oder -delegaten zu erstellen, erstellen Sie einfach einen EventHandler, der den spezifischen Typ T übergibt.
Das sieht falsch aus. Das [MSDN-Website-Beispiel] (http://msdn.microsoft.com/en-us/library/db0etb8x%28v=vs.110%29.aspx) zeigt, dass Rect oder TEventArg von EventArgs erben muss. Es sei denn, ich habe etwas falsch verstanden. –
Thomas, ich fand das auch verwirrend. Aber Jupis Vorschlag funktionierte für mich. –
Wow ... ich wünschte, ich hätte das vor langer Zeit gewusst. Ich nahm immer an, dass, wenn Sie EventHandler
- 1. Ist es möglich, Daten an PostgreSQL-Trigger zu übergeben?
- 2. Ist es möglich, benutzerdefinierte EventArgs mit SystemEvents zu verwenden?
- 3. Ist es möglich, anonyme Klasse ohne äußere Klasse zu serialisieren?
- 4. Ist es möglich, eine "Freund-Klasse" in C++ zu erstellen?
- 5. Ist es möglich, eine Klasse als Parameter an eine Funktion in C++ zu übergeben?
- 6. Wie übergeben Parameter an TypeConverter abgeleitete Klasse
- 7. Ist es möglich, eine ListViewGroup zu erstellen
- 8. Warum gibt es die Basic EventArgs Klasse?
- 9. Ist es möglich, Befehlszeilenvariablen an einen Bitbake-Build zu übergeben?
- 10. Ist es möglich, eine Kopie nur der Dateien zu erstellen, die nicht an SVN übergeben wurden?
- 11. Möglich, Parameter an eine Haut zu übergeben?
- 12. Android: Ist es möglich, ein SurfaceTexture ohne SurfaceView zu erstellen?
- 13. Ist es möglich, in VB.NET eine gemeinsame Datenbankklasse zu erstellen?
- 14. Ist es möglich, Daten mit Threads ohne Klonen zu teilen?
- 15. Ist es möglich, ein Objekt ohne eine Klasse in C# zu erstellen?
- 16. In PHP ist es möglich, eine Instanz einer Klasse zu erstellen, ohne den Konstruktor der Klasse aufzurufen?
- 17. Pass Parameter zu Basisklassenkonstruktor während Abgeleitete Klasse-Objekt erstellen
- 18. Ist es sicher, eine va_list an eine andere Funktion zu übergeben, ohne va_copy zu verwenden?
- 19. Ist es möglich, ein Polymer-Element ohne HTML zu erstellen?
- 20. Ist es möglich, polymorphe Klasse im Shared Memory zu speichern?
- 21. Ist es möglich, Portable VM zu erstellen?
- 22. Ist es möglich, Ansichten ohne XML in Android zu erstellen?
- 23. Ist es möglich, eine Suchmaschine für meine Website zu erstellen, ohne eine Datenbank zu haben?
- 24. Ist es möglich, einen unbenannten Parameter zu übergeben, ohne eine temporäre Variable zu erzeugen?
- 25. OCaml ist es möglich, einzelne zu erstellen, wenn (ohne sonst)
- 26. Ist es möglich, cout oder fout an eine Funktion zu übergeben?
- 27. Ist es möglich, eine Klasse in Java zu klonen?
- 28. Ist es möglich, eine Windows-Verknüpfung mit PHP zu erstellen?
- 29. ist es möglich, eine Sitzungsvariable innerhalb eines Threads zu erstellen?
- 30. Ist es möglich, GStreamer ohne eine GLib Hauptschleife zu verwenden?
Wenn Sie versuchen, Daten auf Huckepack zu übertragen Ein Mausklick-Ereignis, das nicht nur nicht möglich ist, sondern auch anzeigt, dass ein Problem mit Ihrem Design vorliegt. – Will
Gibt es eine Chance zu erklären, warum dies notwendigerweise ein Designproblem ist? Kann ein Menü nicht semantisch als ein Stapel von Schaltflächen angesehen werden, dessen zugeordnetes Ereignis es erlaubt zu fragen, welche "Schaltfläche" tatsächlich im Menü gedrückt wurde? Mit welchem Designprinzip brechen Sie, indem Sie zusätzliche Informationen zusammen mit einem Knopfdruck weitergeben möchten? – Patrick