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

Wie übergebe ich handles von einem zum anderen GUI?

 

denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.11.2012, 10:42     Titel:
  Antworten mit Zitat      
clustering_n00b hat Folgendes geschrieben:
Okay - habe das Problem nun selber gelöst.

Lokal war das Stichwort. Da beide handles nur lokal gültig waren habe ich den settings Struct als globale Variable definiert.

Ich muss also MainGUIhandles nicht an SettingsGUI übergeben und auch nichts zurückholen müssen.


Vielleicht hilft diese Antwort jemand anderen weiter Smile


Wie gesagt es ist ein Fehler, GLOBALE Variablen sind gefährlich: schwer zu verwalten und zu debuggen. Und nicht zu vergessen die globale Variablen müssen auch noch gesondert gelöscht werden.

Es wäre besser wenn du die Handles wirklich über GUIDATA oder SETAPPDATA/GETAPPDATA verwaltest, dazu bietet ja Matalab diese Funktionen wohl nicht umsonst?!

Eventuell musstest du einfach die veränderten handles an der Stelle aktualisieren
handles= guidata(MainGuiHandle);
Private Nachricht senden Benutzer-Profile anzeigen


clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 29.11.2012, 17:38     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:

Es wäre besser wenn du die Handles wirklich über GUIDATA oder SETAPPDATA/GETAPPDATA verwaltest, dazu bietet ja Matalab diese Funktionen wohl nicht umsonst?!

Eventuell musstest du einfach die veränderten handles an der Stelle aktualisieren
handles= guidata(MainGuiHandle);



Hey denny! Very Happy

Ich habe es nochmals versucht, und zwar:

In MainGUI.m
Code:

function SettingsGUI_Callback(hObject, eventdata, handles)

set(handles.reset, 'UserData', 'abc')
fprintf('Print Userdata of reset before calling SettingsGUI: %s\n', get(handles.reset, 'UserData'))
% Open SettingsGUI
SettingsGUI(handles)
 


Dies ist ein Beispielstring, der auf 'abc' gesetzt wird, und desser Verlauf ich jetzt beobachten möchte.

'abc' wird auch auf der Konsole angezeigt.

In SettingsGUI.m
Code:

function SettingsGUI_OpeningFcn(hObject, eventdata, handles, varargin)

% Regular stuff
handles.output = hObject;
guidata(hObject, handles);

MainGUI = gcbf;
MainGUIhandles = guidata(MainGUI);
setappdata(MainGUIhandles.reset, 'UserData', 'cba')
fprintf('Print Userdata of reset in SettingsGUI: %s\n', get(MainGUIhandles.reset, 'UserData'))
 


Und erneut wird 'abc' auf der Konsole angezeigt.
Da läuft doch was schief?


Und jetzt der Test in MainGUI.m:

Code:
function reset_Callback(hObject, eventdata, handles)

fprintf('Print Userdata of reset after pressing reset: %s\n', get(handles.reset, 'UserData'))


Und wieder der String 'abc'.

Keinmal ist 'cba' gezeigt worden.

Ich versteh' das Zeug echt nicht mehr.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.11.2012, 17:48     Titel:
  Antworten mit Zitat      
Hallo
Wenn du SETAPPDATA verwendest, musst entsprechend an anderer Stelle GETAPPDATA benutzen:
Code:


function reset_Callback(hObject, eventdata, handles)

fprintf('Print Userdata of reset after pressing reset: %s\n', getappdata(handles.reset, 'UserData'))

 
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 29.11.2012, 18:06     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:
Hallo
Wenn du SETAPPDATA verwendest, musst entsprechend an anderer Stelle GETAPPDATA benutzen:
Code:


function reset_Callback(hObject, eventdata, handles)

fprintf('Print Userdata of reset after pressing reset: %s\n', getappdata(handles.reset, 'UserData'))

 



Hey denny!

Das hat ja tatsächlich wunderbar funktioniert!!!

Aber kannst du mir erklären, wieso in SettingsGUI_OpeningFcn beim zweiten fprintf-Statement die Ändering zu 'cba' nicht angezeigt wird?
Es wird nämlich wieder 'abc' angezeigt.

Code:

function SettingsGUI_OpeningFcn(hObject, eventdata, handles, varargin)

% Regular stuff
handles.output = hObject;
guidata(hObject, handles);

MainGUI = gcbf;
MainGUIhandles = guidata(MainGUI);
setappdata(MainGUIhandles.reset, 'UserData', 'cba')
fprintf('Print Userdata of reset in SettingsGUI: %s\n', get(MainGUIhandles.reset, 'UserData'))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 30.11.2012, 10:03     Titel:
  Antworten mit Zitat      
Hallo
Wie gesagt stets kontinuierlich bleiben. Wenn du SETAPPDATA verwendest, musst du die Daten wieder mit GETAPPDATA auslesen
Das heißt: Statt GET bitte dann GETAPPDATA verwenden:


Code:
function SettingsGUI_OpeningFcn(hObject, eventdata, handles, varargin)

% Regular stuff
handles.output = hObject;
guidata(hObject, handles);

MainGUI = gcbf;
MainGUIhandles = guidata(MainGUI);
setappdata(MainGUIhandles.reset, 'UserData', 'cba')
fprintf('Print Userdata of reset in SettingsGUI: %s\n', getappdata(MainGUIhandles.reset, 'UserData'))
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 05.12.2012, 20:42     Titel:
  Antworten mit Zitat      
Vielen Dank denny!

Das Thema hat sich nun endlich erledigt! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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 - 2025 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.