WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

handles an externe funktion übergeben

 

daNnyTigA
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 27.05.15
Wohnort: ---
Version: 2014b/2015a
     Beitrag Verfasst am: 08.10.2015, 20:12     Titel: handles an externe funktion übergeben
  Antworten mit Zitat      
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:

Code:
if handles.checkbox1.Value == 1
% Code A
else
% Code B
end


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!
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.10.2015, 10:03     Titel: Re: handles an externe funktion übergeben
  Antworten mit Zitat      
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:
Code:
function PushButton_Callback(ObejctH, EventData, handles)
handles = guidata(ObjectH);  % Aktuelle Version bersorgen!
CheckBoxEnabled = (handles.checkbox1.Value == 1);

yourFunction(YourData, CheckBoxEnabled);


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:
Code:
get(handles.checkbox1, 'Value')

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 :-)
Private Nachricht senden Benutzer-Profile anzeigen
 
daNnyTigA
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 27.05.15
Wohnort: ---
Version: 2014b/2015a
     Beitrag Verfasst am: 09.10.2015, 17:15     Titel:
  Antworten mit Zitat      
vielen Dank, deine Antwort hat mir sehr geholfen! =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.