|
|
Rückgabewert der CloseFunction |
|
stealth_mx |
Forum-Fortgeschrittener
|
|
Beiträge: 94
|
|
|
|
Anmeldedatum: 15.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2013b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 14:16
Titel: Rückgabewert der CloseFunction
|
|
|
|
|
Hallo zusammen, ich habe ein Problem mit dem Rückgabewert eines GUI.
Ich habe ein GUI in der ich ein neues Fenster öffne und diesem einen Wert übergebe.
Hier ist die Funktion in der MainGUI
Dieser kann in dem neuen Fenster manipuliert werden und soll beim schließen des neuen Fensters zurückgebeben werden.
Das neue Fenster kann auf zwei Wege geschlossen werden. Einmal mit einem Button und einmal über das Kreuz. Wenn es über das kreuz geschlossen wird, soll der Wert sich nciht ändern.(dh. Manipulation ist zwecklos). Wird er hingegen über den Button geschlossen soll er den neuen Wert übergeben.
Das neue Fenster hat folgenden Aufbau:
Damit kann ich erfolgreich den manipulierten Wert zurückgeben. Aber wenn ich nun das X drücke dann bekomme ich einen Fehler, "H must be the Handle of...". Ich kann diesen Fehler nachvollziehen. Denn wenn ich über X die CloseRequestFcn starte, dann wird die Löschung des Fensters eingeleitet, ohne uiresume zu setzen. (So denke ich das, ich weiß leider nicht wo ich die Default CloseRequestFcn ansehen kann.)
Ich denke ich muss die Wertübergabe auf jeden Fall erst in der Closefunction ausführen. Dann ist es theoretisch egal woher der Call kommt. Button oder X.
Weiß zufällig einer wie es richtig anstellen muss? Mit dem GUIDE wäre es kein Problem aber ich habe die Funktionen selbst programmiert.
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 14:40
Titel: Re: Rückgabewert der CloseFunction
|
|
Hallo stealth_mx,
Ich habe noch nicht verstanden, was genau Deine Frage ist.
Zitat: |
Damit kann ich erfolgreich den manipulierten Wert zurückgeben. Aber wenn ich nun das X drücke dann bekomme ich einen Fehler, "H must be the Handle of...". Ich kann diesen Fehler nachvollziehen. |
Ist das ein Teil des Problems? dann poste bitte die vollständige Fehlermeldung. Was genau ist "X"?
Zitat: |
(So denke ich das, ich weiß leider nicht wo ich die Default CloseRequestFcn ansehen kann.) |
Zitat: |
Ich denke ich muss die Wertübergabe auf jeden Fall erst in der Closefunction ausführen. Dann ist es theoretisch egal woher der Call kommt. Button oder X. |
Das verstehe ich nicht.
Bitte erkläre das Problem nochmal genauer.
Gruß, Jan
|
|
|
stealth_mx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 94
|
|
|
|
Anmeldedatum: 15.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2013b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 15:22
Titel:
|
|
|
|
|
Hallo das Problem ist ganz einfach.
Beispiel:
Rechte Maustaste auf irgendeinen Ordner. Dann Eigenschaften. Jetzt kann ich z.B Schreibgeschüzt anhacken. Wenn ich nun X drücke werden die Eigenschaften verworfen. Wenn ich OK oder übernehmen drücke werden sie hingegen gespeichert. Öffne ich das Fenste nocheinmal so sehe das Schreibgeschützt aktiviert ist. Das ist alles. Genau sowas will ich realisieren.
Meine Umsetzung ist:
Übergabe der alten Werte an das neue Fenster. Dieses Fenster ließt sie aus und gibt mir die akutellen Parameter auf dem Fenster aus. Diese können nun manipuliert werden. Wenn ich übernehmen klicke werden diese neuen an meinen Hauptgui zurückgegeben. Wenn ich hingegen X klicke möchte ich einfach die Manipulation verwerfen. Und da die Funktion etwas zurück liefern muss, übergebe ich halt genau die, die ich ihr auch beim Aufruf gegeben habe. D.h. ich speichere die Manipulation nicht.
Wenn ich ohne Übergabe arbeite (d.h mit guidata oder setappdata etc) dann ist das kein Problem. Dann habe ich den eindeutigen Fall, dass wenn ich auf den Button Übernehmen klicke, die Einstellungen gespeichert werden, wenn ich einfach so das Fenster schließe, dann werden sie nicht gespeichert. Ich möchte es aber mit dem Übergeben lösen. Ich weiß leider nicht wie man es sauber allgemein löst. Also ob man lieber die Werte übergibt oder das sich das Fenster einfach die Einstellungen selbst aus dem Speicher holt.
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 16:00
Titel:
|
|
Hallo
da muss du die CloseRequestFcn mit deiner eigener Funktion überlagern,
also so
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 16:06
Titel:
|
|
|
|
|
Hallo stealth_mx,
Zitat: |
Rechte Maustaste auf irgendeinen Ordner. Dann Eigenschaften. |
Lass mich raten: Du arbeitest also mit Windows? Und unter Windows meinst Du mit "X" den "Schließen"-Button des Fensters?
Für Dich ist das offensichtlich, aber die Leser können ja nicht durch Deine Augen gucken.
Zitat: |
Übergabe der alten Werte an das neue Fenster. |
Und hier verstehe ich schon die Frage nicht mehr. Wie soll das übergeben werden? In Deinem Beispiel wird das Flag ja im File-System gespeichert. Wo soll die Einstellung in Deinem Fall gespeichert werden? Es gäbe da z.B. Matlab's PREFDIR, wo man ein File für den aktuellen Benutzer speichern kann. Oder soll das auch für andere Benutzer gelten? Und soll es nur in der akutellen Matlab-Session erhalten bleiben, oder auch nach einem Neustart des Rechners?
Zitat: |
Wenn ich übernehmen klicke |
Ich nehme an, Du meinst einen Button, auf dem "Übernehmen" steht.
Zitat: |
Und da die Funktion etwas zurück liefern muss, übergebe ich halt genau die, die ich ihr auch beim Aufruf gegeben habe. |
Unklar.
Zitat: |
Wenn ich ohne Übergabe arbeite (d.h mit guidata oder setappdata etc) dann ist das kein Problem. |
Auch unklar. Wenn es kein Problem ist, mache es doch einfach so.
Zitat: |
Ich möchte es aber mit dem Übergeben lösen. |
Was meinst Du mit "Übergeben"? Und wieso ist das nützlicher?
Mir wird das eigentliche Problem immer noch nicht klarer.
Könntest Du einfach ein UIRESUME in die CloreRequestFcn und/oder DeleteFcn Callbacks der Figure schreiben?
Viele Grüße, Jan
|
|
|
stealth_mx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 94
|
|
|
|
Anmeldedatum: 15.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2013b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 16:09
Titel:
|
|
Hi, ja das kenne,
allerdings funktioniert dann der button nicht mehr. Wenn ich in Myclose uiresume mache dann mache ich doch nach dem uiwait weiter? Nach dem uiwait würde ich meinen output "bedaten" also:
ich würde mein Struct aktualisieren und anschließen in den output schreiben.
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 16:32
Titel:
|
|
Hallo
Ja genau DELETE kommt nach dem UIWAIT nachdem du den Wert holst;
|
|
|
stealth_mx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 94
|
|
|
|
Anmeldedatum: 15.06.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2013b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 16:51
Titel:
|
|
Ja genau da war mein Fehler, ich hatte den Delete hinter dem uiresume in der Closefunction. Führt er eigentlich nach dem uiresume die Funktion weiter aus? oder springt er direkt auf den uiwait?
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 05.02.2015, 19:36
Titel:
|
|
Nach UIRESUME wird zuerst die Funktion zu Ende ausgeführt, und danach zu UIWAIT gesprungen. Deswegen kam es bei dir auch zu einem Fehler, weil das Figure-Handle bereits gelöscht wurde und GUIDATA noch auf dieses Handle zugreifen möchte.
|
|
|
|
|
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.
|
|