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

Vorab geladenen "Edit-Text"-Wert überschreiben

 

BadBor
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2014, 10:45     Titel: Vorab geladenen "Edit-Text"-Wert überschreiben
  Antworten mit Zitat      
Hallo allerseits,

Ich versuche mich gerade erstmals an GUI und habe mich mit viel Arbeit und (Internet-)Lektüre langsam vorgetastet. Jetzt hänge ich aber an einer vermeintlich banalen Stelle und finde keine Lösung dafür (beziehungsweise ich erkenne mein Problem nirgends wieder).

Meine GUI besteht aus:
1) einem "Edit Text"-Feld
2) einem "Push Button"-Feld

Letztendlich enthält 1) eine Variable, die eine Funktion verwendet, dich ich unter 2) verstaut habe (und durch Klicken ausgelöst wird).
Soweit so gut.

Um die Variable nicht immer eintragen zu müssen, möchte ich mir den zuletzt benutzten Wert beim Start automatisch eintragen. Dazu lade ich ihn in der CreatFcn (siehe unten 1b)) aus einer UserData.mat und speichere den verwendeten (eventuell ja geänderten) Wert am Ende von 2) wieder in diese Datei ab.

1a)
Code:
function vari_Callback(hObject, eventdata, handles)
% Text Text
handles.vari = str2double(get(hObject,'String'));
guidata(hObject,handles);


1b)
Code:
function vari_CreateFcn(hObject, eventdata, handles)
% Text Text
if [...] end
load UserData.mat;
handles.vari = UserData.vari;
set(hObject,'String',handles.vari);
guidata(hObject,handles);


Das Verfahren funktioniert mit (manuell vorgegebenem) UserData.mat-Wert, wie es soll.
Sobald ich den Wert ändere, verweigert das Programm den Dienst, meldet

??? Error using ==> get
Invalid Handle Object.


Ich lese an dieser Stelle die handles.vari-Variable ein mit
Code:
vari = str2double(get(handles.vari,'String'));


Nun habe ich irgendwo gelesen, dass ich die Callback-Funktion (1a)), die ja nach der CreateFcn (1b)) abläuft, das existierende handles.vari nicht überschreibt, sondern ein neues, gleichnamiges an die Struktur anhängt - das würde erklären, warum es nicht funktioniert, sobald ich den Wert ändere (und nur dann).

Stimmt das?
Und, noch viel wichtiger, wie sorge ich dafür, dass 2) nur den aktuell in 1) eingetragenen Wert nutzt?

Vielen Dank schon einmal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.05.2014, 19:42     Titel:
  Antworten mit Zitat      
Hallo,

wenn ein Element einer GUI das Tag 'vari' hat, dann darfst du handles.vari nicht zum Speichern eigener Daten in der GUI verwenden, weil du sonst den Verweis auf das GUI-Element überschreibst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
BadBor
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2014, 06:42     Titel:
  Antworten mit Zitat      
Der Trick schien gewesen zu sein, im Callback die hier vierte Zeile einzufügen:

Code:
function vari_Callback(hObject, eventdata, handles)
% Text Text
handles.vari = str2double(get(hObject,'String'));
set(handles,'String',handles.vari);
guidata(hObject,handles);


Jetzt scheint es zu funktionieren...
Ich schlag mich dann mal mit Radio Button Groups rum^^

Danke trotzdem.
Private Nachricht senden Benutzer-Profile anzeigen
 
BadBor
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2014, 12:04     Titel:
  Antworten mit Zitat      
Nein, doch nicht...

Jetzt bekomme ich doch die Meldung

??? Error using ==> set
Conversion to double from struct is not possible
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.05.2014, 12:32     Titel:
  Antworten mit Zitat      
Hallo,

du kannst eine Eigenschaft nur für ein Objekt setzen, nicht für eine ganze Struktur.
Code:
set(handles.Tag,'String',...);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
BadBor
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 20.05.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2014, 07:15     Titel:
  Antworten mit Zitat      
Vielen Dank, das wars!

Mit

Code:
function vari_Callback(hObject, eventdata, handles)
% Text Text
vari = str2double(get(hObject,'String'));
set(handles.vari,'String',vari);
guidata(hObject,handles);

funktioniert es genau so, wie es soll.
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.