|
|
handles an externe funktion übergeben |
|
daNnyTigA |
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 27.05.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2014b/2015a
|
|
|
|
|
|
Verfasst am: 08.10.2015, 20:12
Titel: handles an externe funktion übergeben
|
|
|
|
|
Hallo,
ich habe in meiner GUI eine Checkbox und einen Pushbutton. Wenn ich auf den Pushbutton drücke, wird eine externe Funktion aufgerufen, die ich selbst geschrieben habe. Nun soll diese externe Funktion auswerten, ob der Haken bei der Checkbox gesetzt worden ist oder nicht und je nachdem unterschiedliche Aktionen ausführen. Also eigentlich recht simpel zum Verständnis. In der externen Funktion selbst sollte dann stehen:
Meine Frage ist nun, wie übergebe ich das handles aus dem GUI richtig an meine externe Funktion, sodass das handle für diese sichtbar ist?
- Möglichkeit 1: guidata im GUI in einer globalen Variable speichern und in der externen Funktion aufrufen --> nicht so elegant?
- Möglichkeit 2: in der externen Funktion zu beginn handles = guidata(Name_GUI), wobei das GUI-File Name_GUI.m heißt
Im Moment benutze ich Möglichkeit 2..gibt es noch eine elegantere Möglichkeit? Warum funktioniert Möglichkeit 2 überhaupt? Wenn ich jetzt den Haken bei der Checkbox setze oder entferne und dann den Pushbutton drücke, muss ja an irgendeiner Stelle das handles abgespeichert werden und wird dann in meiner externen Funktion aufgerufen. Außer in der opening_fcn der GUI benutze ich nirgendswo guidata(hObject, handles). An welcher Stelle wird es also gespeichert? Meine Funktion bekommt jede Änderung ja offensichtlich mit..
Vielleicht hab ich das Objekt-Handling noch nicht so richtig verstanden, Danke für eure Hilfe!
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 09.10.2015, 10:03
Titel: Re: handles an externe funktion übergeben
|
|
|
|
|
Hallo daNnyTigA,
Ein sehr wichtiges Programmier-Konzept ist die strikte Trennung von Berechnungen, Daten und GUI. Wenn das alles ordentlich getrennt ist, kann man später seinen Code für die Berechnungen auch einfach aus anderen Programmen aufrufen, das GUI ändern oder für andere Daten verwenden.
Deshalb empfehle ich, alles, was das GUI betrifft in den Callback zu packen:
Zitat: |
Warum funktioniert Möglichkeit 2 überhaupt? |
"handles.checkbox1.Value" ist keine statische Variable, es ist kein Struct! Denn dann würde das im GUI-Code fehlende
guidata
tatsächlich dazu führen, dass die Aktualisierung fehlt.
"handles.checkbox1" ist der Handle der Checkbox. "handles.checkbox1.Value" ist eine moderne Abkürzung für:
Es wird also der aktuelle Wert abgefragt.
Gruß, Jan
PS. Das kann man allerdings auch anders sehen! Im Grunde sind auch "Structs" Objekte. Bei "S.a.b = 1" ist der Wert des Unterfeldes "b" zwar statisch. Aber dies könnte man intern auch anders Programmieren und "b" als dynamische Eigenschaft auffassen, die halt ihren Wert nicht ändert. Das ist aber dann eher philosophischer Natur und sollte nicht weiter verwirren :-)
|
|
|
daNnyTigA |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 22
|
|
|
|
Anmeldedatum: 27.05.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2014b/2015a
|
|
|
|
|
|
Verfasst am: 09.10.2015, 17:15
Titel:
|
|
vielen Dank, deine Antwort hat mir sehr geholfen! =)
|
|
|
|
|
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.
|
|