|
|
Eventlistener mit Parameterübergabe |
|
stealth_mx |
Forum-Fortgeschrittener
|
|
Beiträge: 94
|
|
|
|
Anmeldedatum: 15.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2013b
|
|
|
|
|
|
Verfasst am: 13.03.2015, 15:21
Titel: Eventlistener mit Parameterübergabe
|
|
|
|
|
Hallo zusammen,
ich habe einen Slider mit einem Eventlistener sodass, ich fließend Simulationsverläufe betrachten kann. Nun habe ich das Problem, dass ich in dem GUI ein lokales Handles (localhandle) habe um auf alle Figureinternen Objekte zuzugreifen und ein Projekthandles, welches GUI übergreifend arbeitet. Auf dem Projekthandles möchte ich natürlich nicht den lokalen Kram ablegen.
Das Problem ist jetzt, dass normalerweise ja beim Callback immer das handles der aktuellen Figure an die Callbackfunktion übergeben wird (hier das src in der Callback Methode, was natürlich meine Projektdaten nicht beinhaltet).
Wenn ich ohne Eventlistener arbeite kann ich dem Callback Projekthandles (hObject, oder eben guidata(hObject)) übergeben und habe keine Probleme. Aber es kommt immer eine Fehlermeldung, wenn ich versuche dem Eventlistener mitzuteilen, dass er Projekthandles ebenfalls überreichen soll. Matlab meckert natürlich wenn ich im Eventlistener nichts übergebe, da die Methode function SliderAnimation_Callback(src,~,hObject) "hObject" erwartet.
Beispiel:
Die Fehlermeldung lautet:
Habe dazu im Internet leider nicht die Lösung gefunden.
Es gebe natürliche die Möglichkeit das Projekthandles in den lokalen Speicher zu legen und immer wieder zu aktualisieren, aber das wäre dann meines Erachtens nach Krücken bauen
Was mache ich falsch?
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 13.03.2015, 22:56
Titel: Re: Eventlistener mit Parameterübergabe
|
|
Hallo stealth_mx,
Der Callback muss ein FunctionHandle sein. Cells sind nicht erlaubt. Hier hilft eine anonyme Funktion:
Gruß, Jan
|
|
|
stealth_mx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 94
|
|
|
|
Anmeldedatum: 15.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2013b
|
|
|
|
|
|
Verfasst am: 16.03.2015, 09:45
Titel:
|
|
Hi,
nun funkioniert es!
Was ich allerdings nicht ganz verstehe ist, wieso es funkioniert.
Ich erstelle einen Button und weise dem einen Callback zu. Nun wenn ich den Slider verschoben habe greift der Callback und führt die Funktion aus.
Beim Eventlistener verhält es sich ja etwas anders.
Wer ruft wen wie auf.
Ich sehe ja, dass die anonyme Funktion zwei Eingabewerte hat. Das würde ja bedeuten, dass mein Button mit dem Callback den Event triggert und an den standardmäßig src und evt übergibt. Und der EventlistenerCallback fügt dem ganzen nur noch das hObject zu und ruft dann die eigenliche Funktion auf.
Ist das irgendwo korrekt?
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 17.03.2015, 12:04
Titel:
|
|
|
|
|
Hallo stealth_mx,
Zitat: |
Beim Eventlistener verhält es sich ja etwas anders.
Wer ruft wen wie auf. |
Der Event-Listener verhält sich ganz genauso wie der Callback.
Der Callback wird aufgerufen, denn man auf die Buttons des Slider klickt, in den Slider-Balken, oder den Slider mit der Maus verschiebt und die Maus wieder loslässt. Der Callback wird also durch diese 4 verschiedenen Events getriggert.
Zusätzlich wird nun ein Listener an das ContinuousValueChange-Event angehängt, also einfach ein weiterer callback von einem anderen Event ausgelöst, nämlich dem Verschieben des Sliders während die Maus noch gedrückt ist.
Zitat: |
Ich sehe ja, dass die anonyme Funktion zwei Eingabewerte hat. Das würde ja bedeuten, dass mein Button mit dem Callback den Event triggert und an den standardmäßig src und evt übergibt. Und der EventlistenerCallback fügt dem ganzen nur noch das hObject zu und ruft dann die eigenliche Funktion auf. |
Ganz genau so.
Bei den "normalen" Callbacks kann man als Vereinfachung ein Cell angeben statt der anonymous function. Das dient aber nur zur besseren Lesbarkeit. Es ist schade, dass das bei den ADDLISTENER-Methoden (noch) nicht geht.
Gruß, Jan
|
|
|
stealth_mx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 94
|
|
|
|
Anmeldedatum: 15.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2013b
|
|
|
|
|
|
Verfasst am: 17.03.2015, 13:22
Titel:
|
|
Super danke für die Antwort!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|