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

Variable innerhalb der Gui uebergeben bzw. aktualisieren

 

chris4aus
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2011, 05:15     Titel: Variable innerhalb der Gui uebergeben bzw. aktualisieren
  Antworten mit Zitat      
Hallo!

Ich stehe total auf dem Schlauch, sehe den Wald vor Baeumen nicht.
http://www.gomatlab.de/variable-inn.....ui-uebergeben-t20799.html --> hilft mir leider nicht weiter
Ich habe zwei globale Variablen deklariert:
Code:

function gui_111117_OpeningFcn(hObject, ~, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure

% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to gui_111117 (see VARARGIN)

% PROGRAMM STARTS HERE
handles.height = 1;
handles.max_x = 0;

% Choose default command line output for gui_111117
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
 


und wollte gerne aktualisieren, wenn ich einen neuen Wert in die Funktion height_stage_callback eingebe. Ich muss nun ueberpruefen, ob popupheight_stage auf Hoehe oder Dimensionen steht, damit ich mit diesem Wert weiterarbeiten kann.
Code:
% --- Executes on selection change in popupheight_stage.
function popupheight_stage_Callback(hObject, ~, handles) %height/stage dim
contents = cellstr(get(handles.popupheight_stage,'String'));
switch contents{get(handles.popupheight_stage,'Value')}
    case 'Height'
        % save variable as height
        handles.height = str2double(get(handles.height_stage,'String'));
        handles.max_x = (handles.height)^2; % sqrt(handles.height);+ ((width_layer{i}(1)/hspace{i}(s))+2)*vspace)^2 + (width_layer{i}(1))^2);
        set(handles.text_height_stage,'String', num2str(handles.max_x));
        set(handles.text_height_stage_calc,'String','Stage dimension will be');
    case 'Stage dimension'
        % calculate height
        handles.max_x = str2double(get(handles.height_stage,'String'));
        handles.height = sqrt(handles.max_x);
        set(handles.text_height_stage,'String', num2str(handles.height));
        set(handles.text_height_stage_calc,'String','Height will be');
end % switch
guidata(hObject,handles)
 

Code:

function height_stage_Callback(hObject, ~, handles) % height/stage dim
% call popupheight_stage_Callback to update dimensions
popupheight_stage_Callback(gcbo, [], handles);

test_par_height(hObject,handles);
 

Mit Hilfe des Debug modus habe ich auch herausgefunden, dass handles. height auch aktualisiert wird in der popup-function, aber nicht uebergeben wird.
Warum? ich schreibe doch guidata(hObject,handles) und dachte, dass dann die globalen Variablen gespeichert werden.
Aber die Variable kommt in der test_par_height-Funktion nicht an, bzw. nur der globale gesetzte Wert.
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: 17.11.2011, 12:12     Titel: Re: Variable innerhalb der Gui uebergeben bzw. aktualisieren
  Antworten mit Zitat      
Hallo chris4aus,

Ja, Du hast den "handles" Struct, der im GUI gespeichert ist, erfolgreich upgedated. Aber in der Funktion popupheight_stage_Callback greifst du dennoch auf eine alte Version von "handles" zu.

Code:
function popupheight_stage_Callback(hObject, ~, handles)
handles = guidata(hObject);   % Now it is uptodate!

Das "handles" als Input wird während der Erstellung des GUIs definiert, danach aber nicht mehr dynamisch geändert. Eigentlich ist es deshalb als Input eher ungeeignet.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2011, 01:46     Titel: Beantwortet
  Antworten mit Zitat      
Hallo Jan!

Du meintest wahrscheinlich, dass ich diese Zeile in den anderen Aufruf setzen muss:
Code:

function height_stage_Callback(hObject, ~, handles) % height/stage dim
% call popupheight_stage_Callback to update dimensions
popupheight_stage_Callback(gcbo, [], handles);
handles = guidata(hObject);
test_par_height(hObject,handles);
 

Aber jetzt funktioniert es so.

Ich hatte extra in der Anleitung gelesen, alles in die handles zu packen, damit es immer mitgenommen wird - wuerdest du es einfach als neue Variable definieren?
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.