das erste Problem habe ich hinbekommen. Ich habe den kompletten Code für die Popups ausgelagert, ich glaube das nennt man rekursiv. Jetzt habe ich das Problem, dass ich so viele Info`s schreiben muss, wie ich Popus habe.
Die Info über den letzten Stand des Popups erhalte ich über:
die Info muss nur für jedes Popup einzeln gespeichert werden, sonst gibt es den Fehler, dass alle auf eins zurückgreifen wollen.
Ich bräuchte eine Art Funktion die info_(selectedpopup) setzt. Wobei selectedpopup 1,2,3,4 wäre. Ich habe es leider nicht geschaft. Das Abrufen würde ich dann so machen: info_R = ['info_' num2str(selectedpopup)];
ich glaube ich war nicht genau genug. Alles hinter dem = ist schon voll lauffähig. Mein Problem ist nur, dass z.B. für das 1 Pop die info geschrieben wird, es funktioniert. Wenn ich das zweite Pop wähle, greift dieser auch auf die Info zurück und das geht so nicht. Das heißt jedes Pop muss seine eigene Info schreiben. Also z.B. info_1, info_2 etc., sodass jedes Pop seine eigene Info schreibt. Da ich in der bisherigen schreibeweise schon die Variable selectedpopup eingeführt habe, würde ich die gerne kombinieren.
Das heißt z.B.:
Vorgabe selectedpopup=1 ->daraus soll folgen-> Info_1 das könnte ich ja z.B. über info = ['info_' num2str(selectedpopup)]; und jetzt mein Problem, wenn ich jetzt sage info=gettappdata(....) über schreibe ich ja [...]. Es soll aber nicht ersetzt werden sondern eben als info_1=getappdata. So sollte es dann möglich sein info_1-info_x zu generieren.
Hoffe ich habe das Problem jetzt besser beschrieben
warum sollen die Variable unbedingt info_1 bis info_x heißen? Das ginge zwar mit eval, aber wäre es nicht einfacher, ein 1-mal-x - Cell Array zu erstellen?
Hallo Harald,
ich glaube mein Problem liegt darin, dass die Info nicht für jeden Pop richtig reagiert. Ich habe jetzt nochmal einen Schritt zurück gemacht und hier ist der Code der aktuell alle Popups (4) anspricht.
%Vergleich der POP-Ups Strings, für weiteres Vorgehen
if(strcmp(ausgabe{selectedpopup},'')) set(handles.(Wert_set),'String','');
set(handles.(Wert_set),'Enable','off');
set(handles.(Ausgabe_leeren),'String','');
elseif(selectedpopup~=1 && strcmp(ausgabe{selectedpopup},ausgabe{1})) set(handles.(Wert_set),'String','');
set(handles.(Wert_set),'Enable','off');
set(handles.(info_KP),'Value',3) errordlg('Der Kennparameter wird schon verwendet !', 'Error') elseif(selectedpopup~=2 && strcmp(ausgabe{selectedpopup},ausgabe{2})) set(handles.(Wert_set),'String','');
set(handles.(Wert_set),'Enable','off');
set(handles.(info_KP),'Value',3) errordlg('Der Kennparameter wird schon verwendet !', 'Error') elseif(selectedpopup~=3 && strcmp(ausgabe{selectedpopup},ausgabe{3})) set(handles.(Wert_set),'String','');
set(handles.(Wert_set),'Enable','off');
set(handles.(info_KP),'Value',3) errordlg('Der Kennparameter wird schon verwendet !', 'Error') elseif(selectedpopup~=4 && strcmp(ausgabe{selectedpopup},ausgabe{4})) set(handles.(Wert_set),'String','');
set(handles.(Wert_set),'Enable','off');
set(handles.(info_KP),'Value',3) errordlg('Der Kennparameter wird schon verwendet !', 'Error') else set(handles.(Wert_set),'Enable','on');
end
%Setzen der richtigen Einheiten in Abhängigkeit der POP-Up-Wahl
switchget(handles.(info_KP),'Value') case1
Einheit='m/s^2';
case2
Einheit='s';
case3
Einheit='';
end
Ist vielleicht etwas unübersichtlich, aber so läuft es auf jeden Fall für ein Pop ganz gut. Sobald ich aber das zweite Pop ebenfalls auswählen möchte, kommt der Fehler:
??? Error using ==> rmfield at 21
FIELDNAMES must be a string or a cell array of strings.
Error in ==> KP_Auswahl_X2 at 36
else handles.ManStruct.Kennparameter = rmfield(handles.ManStruct(1).Kennparameter, info);
Error in ==> Test_Tool>KP_Auswahl_2_Callback at 195
handles = KP_Auswahl_X2( handles, hObject, selectedpopup);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Test_Tool at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==> @(hObject,eventdata)Test_Tool('KP_Auswahl_2_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
Falls es einfacher ist, sich das Programm anzuschauen, könnte ich dies schnell hochladen.
Vielen Dank für den Tipp, wusste noch gar nicht, dass es sowas gibt. Nach ein wenig tüffteln, habe ich den Fehler bzw.fehlende Zeile gefunden. Insgesamt ist jetzt fast alles fertig. Ich habe jedoch nochmal eine Frage bzgl. der Ausführung des Callback.
[Strucktur der Optik, vgl. Anhang]
Ich wähle einen Eintrag im Pop1 aus, geben dem einen Wert im Werte-Fenster und danach wird dieser in den Struct geschrieben. Verändere ich nun den Pop-Eintrag, muss ich erst einen neuen Wert im Werte-Fenster eingeben, bevor der alte Wert (Name aus Pop+Wert) aus dem Struct gelöscht wird. Gibt es irgendeine Möglichkeit dies so zu ändern, dass durch Veränderung des Pops schon das Löschen "durchgeführt wird". Hauptsächlich führt das aktuell zu dem kosmetischen Problem, dass bei Auswahl von '' im Pop das Werte-Fenster auf inactive gesetzt wird, das Programm aber leider ein Enter erwartet bevor der vorherige Wert aus dem Struct gelöscht wird.
Ich habe aber festgestellt, dass es dabei egal ist, ob ich Enter im Werte-Fenster 1,2,3 oder 4 drücke. Danach wird es korrekt gelöscht. Weist du Abhilfe?
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.