我知道这可能是一个简单的问题,但我是 Matlab GUI 的新手,基本上想获取过去存储在文本框中的旧值来替换刚刚输入的值。例如
这应该如何实施或完成? Atm 我只是使用获取和设置属性值。 以下是一些示例代码:
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
只需将新字段
sampledistPrev
添加到您的句柄结构中即可。
在 GUI 的
openingFcn
中,使用如下行定义属性:
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)
然后你像这样更新你的回调:
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
为什么不将“之前的值”存储为该对象的“UserData”,如下所示:
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.
作为对这个旧线程的贡献,我将最新的脚本(asnwer 2)修改为通用脚本,这样您就可以在任何编辑文本框的回调上使用它。脚本会自动检测对象的标签。
这样你就可以通过直接从 uicontrol 回调中调用该脚本来直接调用该脚本进行数值数据验证。
希望有帮助。
致以诚挚的问候。
function Edit_Box_Numeric_Value_Check(hObject, handles)
str = str2double(get(hObject,'String'));
if (isempty(str)||isnan(str))
warndlg('Input must be a real number','Warning');
% errordlg('Input must be a real number','Warning');
val=str2double(get(hObject,'UserData'));
if (isempty(val)||isnan(val))
val='';
end
set(hObject,'String',val); %<--- This is where you'd like to set the previous entry value!
guidata(hObject,handles);
else
str=num2str(str);
set(eval(sprintf('handles.%s',hObject.Tag)),'String',str,'UserData',str);
guidata(hObject,handles);
end