Verfasst am: 14.01.2010, 13:11
Titel: Variablen erzeugt in For schleife -> Verwendung danach
Servus,
will ganz viele Menu Einträge erstellen. Die Namen und Formatierungen habe ich in einer .mat als Struct Array gespeichert. Da Alle Einträge den selben Aufbau haben will ich sie in einer For-Schleife zusammensetzten.
Code:
for Stelle = 1:size(AMarker, 2)
Tag = AMarker(Stelle).Tag;
Label = AMarker(Stelle).Label;
Visible = AMarker(Stelle).Visible;
ForeGroundColor = AMarker(Stelle).ForeGroundColor;
assignin('base',['AMarker_' num2str(Stelle)], uimenu(Marker, 'Tag',Tag,'Label',Label,'Visible',Visible,'ForeGroundColor',ForeGroundColor));
end
Das klappt soweit auch alles ganz gut. Lasse ich die For-Schleife in einer eigenen M-File ablaufen öffnet mir Matlab eine Figure mit genau diesen Einträgen die es anzeigen soll. Setzte ich die Schleife in ein Programm (in dem die Einträge bisher "hart" codiert waren) kommt folgende Fehlermeldung.
CMarker 1 ist ein Untermenu von einem Menueintrag, welcher in der For-Schleife erzeugt wurde.
Ich gehe also mal davon aus, das die Variablen die in der For-Schleife erzeugt worden dem Rest des Programms nicht mehr zur verfügung stehen.
ersetze mal in assignin 'base' durch 'caller'.
Hintergrund: das gibt an, in welchem Workspace die Variablen erzeugt werden. Wenn du im Command Window arbeitest, wird der Base Workspace verwendet. Funktionen haben dagegen ihre eigenen Workspaces.
hat leider ncihts bewirkt immer noch das selbe Problem.
Ich habe mir überlegt vor der Schleife ein Cell Array zu initialisieren in dem ich dann die Menu-Einträge reinschreibe aber das hat bisher auch noch keinen Erfolg gebracht.
stehen die for-Schleife und die Zeile CMarker_1 ... in der selben Funktion (d.h. gegebenenfalls auch in der selben Unterfunktion)?
Das ist das einzige Problem, das ich mir hier vorstellen kann. Dazu muss einem klar sein, dass jede Unterfunktion einen eigenen Workspace hat. Alles, was also in einer anderen Unterfunktion bekannt sein soll, muss dorthin als Eingabeargument übergeben werden.
Bei GUIs werden zum Speichern von global benötigten Informationen oft setappdata / getappdata verwendet.
Edit: Der Debugger sollte übrigens helfen, solche Probleme zu erkennen, da dort alle aktiven Workspaces betrachtet werden können.
Grüße,
Harald
Zuletzt bearbeitet von Harald am 14.01.2010, 14:22, insgesamt einmal bearbeitet
das hatte ich zunächst auch falsch im Kopf. Wenn assignin mit Argument 'caller' ausgeführt wird, wird die Variable im übergeordneten Workspace erstellt. Beispiel:
Das funktioniert. Ich bedanke mich recht herzlich. Meine DA wieder ein Stück weiter.
Da war meine Idee mit dem Cell Array gar nciht so schlecht, nur halt falsch umgesetzt
Einstellungen und Berechtigungen
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
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.