Wie den vorherigen Wert von einer Callback-Funktion eingegeben bekommen?
-
05-10-2019 - |
Frage
Ich weiß, dass dies wahrscheinlich ein einfaches Problem, aber ich bin neu in Matlab GUI und will im Grunde den alten Wert zu erhalten, die in dem Textfeld gespeichert werden verwendet, um den Wert zu ersetzen, die gerade eingegeben wurde. Z.
- Textfeld enthält eine gültige Zeichenfolge,
- Der Benutzer gibt ungültige Zeichenfolge,
- Rückruf func, validiert Eingang und realisiert neue Eingabe ist ein Fehler und kehrt zum alten vorherigen Wert.
Wie soll dies umgesetzt oder durchgeführt werden? Atm Ich verwende nur die get und set Eigenschaftswerte. Nachfolgend finden Sie einige Beispielcode:
function sampledist_Callback(hObject, eventdata, handles)
% hObject handle to sampledist (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of sampledist as text
% str2double(get(hObject,'String')) returns contents of sampledist as a double
input = str2double(get(hObject,'String'));
if(input < 0 || input > 500)
errordlg('Sampled Dist. must be > 0 and < 500','Sample Dist - Input Error');
set(handles.sampledist,'String',['10']); %<--- I would like this value 10 to be the previous entry!
guidata(hObject,handles);
else
set(handles.sampledist,'String',['',input]);
guidata(hObject,handles);
end
Lösung
Sie einfach ein neues Feld sampledistPrev
auf Ihre Griffe Struktur hinzuzufügen.
In der openingFcn
der GUI, definieren Sie die Eigenschaft mit einer Zeile wie folgt aus:
handles.sampledistPrev = 10; %# or whatever you choose as default value
%# if you want, you can set the default value to the GUI, so that you only need
%# to change it at one point, if necessary, like so:
set(handles.sampledist,'String',num2str(handles.sampledistPrev));
%# don't forget to save the handles structure at the end of the openingFcn
guidata(hObject,handles)
Dann aktualisieren Sie Ihren Rückruf wie folgt aus:
function sampledist_Callback(hObject, eventdata, handles)
% hObject handle to sampledist (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of sampledist as text
% str2double(get(hObject,'String')) returns contents of sampledist as a double
input = str2double(get(hObject,'String'));
if(input < 0 || input > 500)
errordlg('Sampled Dist. must be > 0 and < 500','Sample Dist - Input Error');
set(handles.sampledist,'String',num2str(handles.sampledistPrev)); %reset value be the previous entry!
guidata(hObject,handles); %# Note that you don't need to save the handles structure unless
%# you have changed a user-defined value like sampledistPrev
%# It may still be useful to do it so you always remember
else
set(handles.sampledist,'String',['',input]);
%# also update the reset value
handles.sampledistPrev = input;
guidata(hObject,handles);
end
Andere Tipps
Warum Sie nicht speichern „um den vorherigen Wert“ als ‚Userdata‘ des Objekts, wie folgt:
function sampledist_Callback(hObject, eventdata, handles)
input = str2double(get(hObject,'String'));
if (input < 0 || input > 500)
errordlg('Sampled Dist. must be > 0 and < 500','Sample Dist - Input Error');
val=get(hObject,'UserData');
if isempty(val)
val='';
end
set(hObject,'String',val); %<--- This is where you'd like to set the previous entry value!
guidata(hObject,handles);
else
input=num2str(input);
set(handles.sampledist,'String',input,'UserData',input);
guidata(hObject,handles);
end
end
% Y. T.