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

POP-UP Vergleich

 

T_Meister
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 05.03.2012, 14:25     Titel: POP-UP Vergleich
  Antworten mit Zitat      
Hallo leute,
ich hab aktuell noch eine Frage zur einer Vergleichsfunktion.
Ich habe zwei POP-UPs, in dem mehrere (aber gleiche) Kriterien stehen.

Code:
handles.KP_Auswahl ={'Beschleunigung';...
                         'Dauer'; '';}                         set(eval(['handles.KP_Auswahl_1']),'String',handles.KP_Auswahl,'Value',3);
     set(eval(['handles.KP_Auswahl_2']),'String',handles.KP_Auswahl,'Value',3);
 


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ß
Private Nachricht senden Benutzer-Profile anzeigen


Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 16:07     Titel:
  Antworten mit Zitat      
Hi,

Der Value des Popup-Menus gibt an, welches Element ausgewählt wurde

Mit
Code:

auswahl=get(handles.popupmenu,'value')
 

kommst du dran.

Die if-Abfrage sollte dann nicht schwer sein. Falls es nicht klappt, am besten mal die Fehlermeldung posten.

PS: die evals sind überflüssig
 
T_Meister
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 05.03.2012, 16:15     Titel:
  Antworten mit Zitat      
Hallo Gast1,

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 ?
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: 05.03.2012, 16:29     Titel:
  Antworten mit Zitat      
Hallo T_Meister,

Ich empfehle dringend: EVALs rauswerfen, falls Fehlermeldungen erscheinen, diese hier posten und das Problem lösen:
Code:
set(handles.KP_Auswahl_1,'String',handles.KP_Auswahl,'Value',3);

Wie sieht denn die IF-Bedinung genau aus?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 05.03.2012, 16:42     Titel:
  Antworten mit Zitat      
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
if isnan(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)


Also mit Worten gesprochen soll dabei rauskommen:

Wenn in KP_Auswahl_1 Beschleunigung ausgewählt wurde
dann folgt set(handles.Aus_Besch,'String',Wert_1);

Wenn ich die Idee von oben aufgreife müsste es doch in etwa
if auswahl='Beschleunigung'
set...
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.03.2012, 17:03     Titel:
  Antworten mit Zitat      
Hallo
Strings vergleicht man über STRCMP- Kommando miteinander.

EVALs-Konstrukte sind schlimm, weil diese sehr Fehleranfällig und Wartungsintensiv sind. Man kann diese Konstrukte nicht debuggen...
Private Nachricht senden Benutzer-Profile anzeigen
 
T_Meister
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 06.03.2012, 09:52     Titel:
  Antworten mit Zitat      
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


Leider funktioniert das so nicht. Könntet ihr mir nochmal wieterhelfen.

Beste Grüße
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: 06.03.2012, 12:19     Titel:
  Antworten mit Zitat      
Hallo T_Meister,

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.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 06.03.2012, 12:27     Titel:
  Antworten mit Zitat      
Hallo Jan

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?

Gruß
Thorsten
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.03.2012, 13:39     Titel:
  Antworten mit Zitat      
Hallo

die Fehlermeldung sagt doch deutlich das die Variable auswahl
vorher definiert sein muss. Also du muss deine Auswahl erstmals von irgendwo holen

popupmenu muss du durch deine Variablennamen ersetzen...
Code:

str             = get(handles.popupmenu,'String')
auswahl     = str{get(handles.popupmenu,'value')}
if (strcmp(auswahl,'Beschleunigung'))
    set(handles.Aus_Besch,'Beschleunigung')
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
T_Meister
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 06.03.2012, 13:54     Titel:
  Antworten mit Zitat      
Hallo denny,

vielen Dank für deine schnelle Antwort. So gehts Wink 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
if isnan(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);
   
end
guidata(hObject,handles)


Es sollen noch mehr Editeingaben kommen und so müsste jedes mal darauf zurückgreifen.

Gruß
Thorsten
Private Nachricht senden Benutzer-Profile anzeigen
 
T_Meister
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 06.03.2012, 16:12     Titel:
  Antworten mit Zitat      
Mit euerer Hilfe konnte erstmal weiterarbeiten Smile 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.
Private Nachricht senden Benutzer-Profile anzeigen
 
T_Meister
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 85
Anmeldedatum: 14.12.11
Wohnort: BS
Version: 2013a&b, 2014a&b
     Beitrag Verfasst am: 12.03.2012, 11:00     Titel:
  Antworten mit Zitat      
Kann mir keine einer Tipp bzgl der Verschiebung der Parameterfestlegung in eine Art Kopffunktion geben? Ich wäre euch sehr dankbar Smile
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.