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

EDIT Text bei 2 interagierenden GUIs

 

gui_einsteiger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 14.06.2012, 07:36     Titel: EDIT Text bei 2 interagierenden GUIs
  Antworten mit Zitat      
Hallo,

ich habe zwei GUI programmiert, die miteinander interagieren. Mein erstes GUI öffnet beim drücken eines Buttons mein zweites GUI, über einen weiteren Button gelange ich wieder zurück zum ersten GUI.

Nun zu meinem Problem. In meinem ersten GUI habe ich ein EDIT-Text-Feld. Dieser Wert ist bei Programmstart mit 0 initialisiert (im Inspector angegeben). Wenn ich nun von meinem zweiten GUI in mein erstes GUI zurück wechsle, wird der Wert immer wieder auf 0 gesetzt und der von mir vorher eingegebene Wert ist zwar noch visuell ersichtlich (steht im EDIT-Feld), im Hintergrund rechnet mein Programm jedoch wieder mit 0. Ich muss immer erst in diesem Feld den aktuellen Wert mit Return bestätigen, damit mein Programm ihn wieder zum rechnen nutzt. Kann ich das ganze umgehen, sodass mein GUI immer den aktuellen Wert aus dem EDIT-Feld nutzt und nicht immer auf dem im Inspector vorgegebenen zurückgreift?

Hier der dazu gehörige Ausschnitt aus meinem Quellcode:

Initialisieren in der OpeningFunction
Code:
function GUI1_OpeningFcn(hObject, eventdata, handles, varargin)
data=str2double(get(handles.wert,'String'));
setappdata(handles.wert,'faktor',data);



Code:
function wert_Callback(hObject, eventdata, handles)
data=str2double(get(handles.wert,'String'));
setappdata(handles.wert,'faktor',data);


Aufruf beim Drücken eines Buttons (Wert wird hier zur Berechnung benötigt)
Code:
function button_Callback(hObject, eventdata, handles)
data=getappdata(handles.wert);
einheit=(data.faktor);


Ich hoffe ihr könnt mir da weiterhelfen

Schon mal vielen Dank
gui_einsteiger
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: 14.06.2012, 08:45     Titel: Re: EDIT Text bei 2 interagierenden GUIs
  Antworten mit Zitat      
Hallo gui_einsteiger,

Ich vermute, die Werte im handles Struct werden neu gesetzt, aber eine Kopie des alten handles Structs wird in den Callbacks weiter verwendet. Ohne dan ganzen relevanten Code zu sehen, ist das aber nur geraten.

Der Struct handles muss nach jeder Änderung wieder in der Figure gespeichert werden:
Code:
guidata(hObject, handles)

und vor jedem Aufruf wieder dynamisch ausgelesen werden:
Code:
handles = guidata(hObject)

Der handles Struct aus den Input Argumenten ist der, der auch während der Erstellung des GUIs erzeugt wurde, er enthält also nicht die Änderungen.

Der Debugger hilft solchen Problemen auf den Grund zu gehen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gui_einsteiger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 14.06.2012, 12:52     Titel:
  Antworten mit Zitat      
Hallo,

wie kann mir der Debugger bei dem Problem helfen?

Du schreibst, der Struct handles muss nach jeder Änderung wieder in der Figure gespeichert werden. An welcher Stelle muss ich das in meinem Programm machen? Kenn mich da leider noch nicht so gut aus wie ich das gerne würde.

Wann muss ich das Struct handle wieder dynamisch auslesen? Wenn ich von meinem 2. Gui wieder in mein erstes zurückspringe?

Falls du mehr Code-Teile brauchst, kannst du mir sagen welche Teile du dafür sehen musst, dann kann ich dir diese zur Verfügung stellen. Will nur nicht meinen kompletten Code posten.

Vielen Dank schon mal
gui_einsteiger
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: 14.06.2012, 16:46     Titel:
  Antworten mit Zitat      
Hallo gui_einsteiger,

Zitat:
wie kann mir der Debugger bei dem Problem helfen?

Du kannst mit dem debugger Zeile für Zeile durch den Code gehen und beobachten, wieso welche Variable auf welchen Wert gesetzt wird.

Wenn Du einen struct, z.B. den handles Struct, innerhalb einer Funktion änderst, sind diese Änderungen von Ausserhalb der Funktion nicht sichtbar, da die Funktion ihre eigene Kopie des Structs bearbeitet. Damit der handles Struct dann auch in allen anderen Unterfunktionen in der geänderten Fassung erscheint, muss man ihn am Ende der Funktion per "guidata(hObject, handles)" in der Figure speichern, und beim Eintritt in eine neue Funktion per "handles = guidata(hObject)" wieder auslesen.
Diese beiden Aufrufe sind nur Wrapper für "setappdata(FigureHandle, 'Handles', handles)" und "handles = getappdata(FigureHandle, 'Handles')", siehe "edit guidata".

Gruß, Jan
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 - 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.