Es wird nun neben den zwei Popups in je einem dazugehörigen Edit-Fester eine Zahleneingabe getätigt, z.B. 3 und wird als Variable Wert gespeichert. Diese soll nun in ein weiteres Edit übergeben werden. Vorher soll aber verglichen mit dem Pop-Up enschieden werden um was für einen Wert es sich handelt (Dauer, Beschleunigung). Ich habe schon überlegt dies mit einer IF-Bedingung zu verknüpfen, nur leider hat es bis jetzt noch nicht funktioniert.
Vielleicht könnt ihr mir helfen...
Gruß
Gast1
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 05.03.2012, 16:07
Titel:
Hi,
Der Value des Popup-Menus gibt an, welches Element ausgewählt wurde
zunächst erstmal vielen Dank für deine Antwort, ich hab die evals mal rausgeworfen, jedoch kommen dann nur noch Fehler, deshalb hab ich sie wieder eingebaut.
Kann ich bei der IF-Bed dann gleich dem Value (1 oder meine gewählten Namen) setzten ?
Gut der Evals Fehler hat sich erledigt, hatte etwas im Syntax übersehen. Aber kannst du mir sagen/erklären, warum evals so schlimm sind?
Nach dem im Popup z.B. Beschleunigung ausgewählt wurde gibt man einen Zahlenwert ins Edit ein und diese soll dann einem anderen Edit zugeordnet werden.
Code:
Wert_1 = str2double(get(hObject,'String'));
% Wenn keine korrekte Eingabe erfolgt ist ifisnan(Wert_1)
Wert_1 = 0;
set(hObject,'String',Wert_1);
errordlg('Eingabe muss eine Zahl sein', 'Error') end
handles.Wert1 = Wert_1;
set(handles.Aus_Besch,'String',Wert_1);
guidata(hObject,handles)
Zunächst einmal vielen Dank für eure Hilfe, das hat mich schon ein gutes Stück weitergebracht. Jedoch verstehe ich nicht ganz wie ich das STRCMP- Kommando, in meinem FAll, anwenden muss. Ich habe mir die Matlab Hilfe und Examples angeschaut. Ich bin der Meinung, dass es doch so lauten müsste:
Code:
if(strcmp(auswahl,'Beschleunigung')) set(handles.Aus_Besch,'Beschleunigung') end
Wenn Du schreibst "funktioniert nicht", kann man nicht ohne weiteres helfen. Bitte erkläre immer, was genau nicht funktioniert, also welches Verhalten Du siehst, und welches Du erwartest.
Das gezeigte STRCMP-Kommando sieht in Ordnung aus.
das Ausgangsproblem ist ja, das ich durch den Vergleich des String in meinem Popup mit einem definierten Begriff, siehe oben, abgleichen möchte.
Scheinbar ist das Problem, dass ich die Variable schon mal so nicht defnieren kann, wie von Gast1 geschrieben, bzw hab ich die ggf auch falsch einbezogen, das weiß ich nicht, denn es kommt folgender Fehler:
??? Undefined function or variable 'auswahl'.
Error in ==> Kennparametertool_v3>Wert1_Callback at 218
if (strcmp(auswahl,'Max. Beschleunigung'))
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Kennparametertool_v3 at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==> @(hObject,eventdata)Kennparametertool_v3('Wert1_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
Ich habe das, wie oben beschrieben, in die Opening Function geschrieben. Ich habe Value in String umbenannt, da ich nicht auf eine Nummer sondern das Wort zurückgreifen möchte, das müsste dann doch so möglich sein, oder?
vielen Dank für deine schnelle Antwort. So gehts Ich hatte vorher auswahl so denfiniert nur nicht das str davor. Das zweite, was mit aufgefallen ist, es geht nur einzubinden im Callback meines Edits, in der opening function geht es nicht da kommt der Fehler, wie oben beschrieben. Ich muss jedoch noch oft auf diese "Auswahl" zurückgreifen. Gibt es eine möglichkeite es noch"schicker" zu machen als:
Code:
function Wert1_Callback(hObject, eventdata, handles)
Wert_1 = str2double(get(hObject,'String'));
% Wenn keine korrekte Eingabe erfolgt ist ifisnan(Wert_1)
Wert_1 = 0;
set(hObject,'String',Wert_1);
errordlg('Eingabe muss eine Zahl sein', 'Error') end
handles.Wert1 = Wert_1;
str=get(handles.KP_Auswahl_1,'String');
ausgabe=str{get(handles.KP_Auswahl_1,'value')};
if(strcmp(ausgabe,'Max. Beschleunigung')) set(handles.Aus_Besch,'String',Wert_1);
Mit euerer Hilfe konnte erstmal weiterarbeiten Jetzt habe ich auch noch einen Vergleich zwischen den POP-UPs implementiert. Es funktioniert auch soweit. In Zukunft werden noch mehrere POPUPSs mit eingebettet. Unter kann man den Code sehen, für mehr POPUps kann man dies sicher mit elseif erweitern. Der Code wird dadurch jedoch auch immer länger und länger. Ich muss sehr häufig auf die str_X und ausgabe_X zurückgreifen.
Code:
str_2=get(handles.KP_Auswahl_2,'String');
ausgabe_2=str_2{get(handles.KP_Auswahl_2,'value')};
str_1=get(handles.KP_Auswahl_1,'String');
ausgabe_1=str_1{get(handles.KP_Auswahl_1,'value')};
if(strcmp(ausgabe_1,'')) set(handles.Wert1,'Enable','off');
elseif(strcmp(ausgabe_1,ausgabe_2)) set(handles.Wert1,'Enable','off');
errordlg('Der Kennparameter wird schon verwendet', 'Error') else set(handles.Wert1,'Enable','on');
end
Ist es möglich diese Zuweisungen auszulagern, in eine Art Kopf, um die Übersichtlichkeit zu verbessern?
Was noch nicht funktioniert ist, dass wenn das POP-UP auf '' steht die Überprüfung nicht stattfinden soll, ich dachte, dass er das in dem ersten if Befehl beachtet.
Kann mir keine einer Tipp bzgl der Verschiebung der Parameterfestlegung in eine Art Kopffunktion geben? Ich wäre euch sehr dankbar
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.