Verfasst am: 25.03.2010, 08:14
Titel: Eingabewerte im Edit Text prüfen
Hallo wie kann ich eingegebene Werte im Edit Text bei einer GUI prüfen.
Es dürfen nur bestimmte Werte eingegeben werden, ansonsten will ich eine Fehlermeldung ausgeben, dass die Werte ungültige Eingaben sind.
Die gültigen Eingabewerte sind 0, 1, x^0 bis x^10.
so ein Problem hatte ich auch. Ich habe es über eine extra function gelöst.
heißt:
Code:
% in den uicontrolls des edit-feldes:
'tag','111',
'callback','eingabe1 = prueffunc(111,eingabe1,eingabe1min,eingabe1max)'
% es wird die Tag-nummer des Editfeldes, das Value selber und Min- und Max-Werte übergeben
function[Xm] = prueffunc(TagNr,Xn,SV,Xmin,Xmax) if SV == 1
Xm = get(findobj(gcbo),'String'); %eingegebener Wert wird aus der GUI geholt
Xm = str2double(Xm);
% Überprüfung auf Min- und Max-Werte if Xm<=Xmin Xm = Xmin; elseif Xm>=Xmax Xm = Xmax; end % hier können weitere beliebige Überprüfungen von Xm stehen % mit dem set-Befehl wird der korrigierte Wert zurück in das Edit-Feld geschrieben set(findobj(gcf,'Tag',num2str(TagNr)),'String',num2str(Xm));
über die SV Werte lassen sich verschiedene Überprüfungen (z.B. Zahleneingabe, In- oder Dekrementierung (plus / minus), oder anderes) in einer Funktion bewerkstelligen.
Ergebnis: in dem Edit-Feld steht ein korrigierter Wert (falls er falsch eingegeben wurde) und die Variable eingabe1 enthält den eingegebenen bzw. korrigierten Wert.
Aber wie kann ich das ganze aufrufen, abgesehen von nem Button oder der Callback?
Ich fände es gut, wenn während der Eingabe schon auf Richtigkeit geprüft würde eben ob das aktuelle Zeichen korrekt sein kann oder nicht...
Geht das mit Matlab?
Kann man die Callback evtl bei jedem Tastendruck aufrufen?
Wie funktioniert die KeyPressFcn und kann man sie in Verbindung mit CurrentObject nutzen um die Funktion zu implementieren?
@ Zenon
dann schau dir nochmal meine Lösung an. Ist zwar am Anfang etwas aufwendiger, aber im nachhinein und bei mehreren Edit-Felder übersichtlicher und einfacher handhabbar. Finde ich ...aber ich hab auch ziemlich viele Eingabefelder (>40)
jedesmal, wenn du in einem Edit-Feld Enter drückst oder nach Eingabe mit der Maus woanders hin klickst, wird der Callback aufgerufen.
Grüße
Roland
Georg
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.03.2010, 13:15
Titel:
Hi denny,
habe leider mehrere edittext felder, daher würde ich gern das Ganze mit einer for Schleife realisieren, sodass ich nicht immer eingabe0 bis eingabe12 extra schreiben muss.
hab es so versucht,
doch bei richtiger Eingabe der Werte gibt mir Matlab trotzdem ne fehlermeldung aus. Achso und noch ne Frage, warum haste bei dir x^10 nochmal extra, anstatt die x^10 auch im Vektor zu lassen?
Macht das einen Unterschied?
Georg
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.03.2010, 13:17
Titel:
Hi denny,
habe leider mehrere edittext felder, daher würde ich gern das Ganze mit einer for Schleife realisieren, sodass ich nicht immer eingabe0 bis eingabe12 extra schreiben muss.
hab es so versucht,
doch bei richtiger Eingabe der Werte gibt mir Matlab trotzdem ne fehlermeldung aus. Achso und noch ne Frage, warum haste bei dir x^10 nochmal extra, anstatt die x^10 auch im Vektor zu lassen?
Macht das einen Unterschied?[/quote]
% Eingabe Variablen anlegen for k=0:12 eval(sprintf('eingabe%d=''x^%d'';',k,k)) end
% testen
res = false(1,13);
for k=0:12
res(k+1) = eval(sprintf('test_eingabe(eingabe%d);',k)) end
error_pos = find(~res);
if ~isempty(error_pos) fprintf('Eingaben:\t' );
fprintf('%d\t',error_pos);
fprintf('sind nicht in Ordnung\n' );
end
Achso und noch ne Frage, warum haste bei dir x^10 nochmal extra, anstatt die x^10 auch im Vektor zu lassen?
Macht das einen Unterschied?
Extra deswegen, weil x^[0-9] Vektor gibt nur eine Position,
da du nur eine 2-Stellige Zahl erwartest x^10, war es einfacher extra einzugeben.
sonst muss du eingeben wie viele stellige Zahlen du erwartest
x^[0-9]{1,2} z.B für 1 und 2 Stellige
Georg
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.03.2010, 15:02
Titel:
Hi Denny, danke für die schnelle Antwort.
Irgendwie funzt bei mir die Funktion nicht so ganz.
Die untere Konstruktion funktioniert mittlerweile, aber bei 3-stelligen Edittext Feldern wirds groß.
Code:
res0 = regexp(eingabe0 ,'^(0|1|x\^[0-6])$')
res1 = regexp(eingabe1 ,'^(0|1|x\^[0-6])$')
res2 = regexp(eingabe2 ,'^(0|1|x\^[0-6])$')
res3 = regexp(eingabe3 ,'^(0|1|x\^[0-6])$')
res4 = regexp(eingabe4 ,'^(0|1|x\^[0-6])$')
res5 = regexp(eingabe5 ,'^(0|1|x\^[0-6])$')
res6 = regexp(eingabe6 ,'^(0|1|x\^[0-6])$') for k=0:6 ifisempty(eval(['res' num2str(k)])) errordlg('Es sind nur die Werte von 0,1, x^0...x^6 erlaubt!','Ungültige Eingabe\n');
return else fprintf('Eingabe OK\n') end end
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.