- how your code behaves and
- how you want it to behave
Prompting Error for user input
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Suppose I have a input box that requires an entry greater than zero before attempting to load a file.
function test_Callback(hObject, eventdata, handles)
test = str2double(get(hObject, 'String'));
if isnan(test)
set(hObject, 'String', 0);
errordlg('Input must be a number','Error');
end
handles.backup.test= test;
guidata(hObject,handles)
function loaddata_Callback(hObject, eventdata, handles)
test_Callback(hObject, eventdata, handles)
[filename, pathname, Index] = ...
uigetfile({'*.txt';},['Select the File to load'],...
'\\MyDocuments\User');
This prompts the error "'Input must be a number','Error'' and allows the user to open and search for this file. What am I doing wrong?
6 comentarios
per isakson
el 19 de Feb. de 2013
Editada: per isakson
el 20 de Feb. de 2013
Yes, but what does the code that I added to my answer do?
Respuesta aceptada
per isakson
el 14 de Feb. de 2013
Editada: per isakson
el 19 de Feb. de 2013
You need to put this
test = str2double(get(hObject, 'String'));
if isnan(test)
set(hObject, 'String', 0);
errordlg('Input must be a number','Error');
end
in a loop and not leave the loop until you have a legal value from the user.
BTW: I think it is a good habit to close functions with "end".
.
A detail: change
set(hObject, 'String', 0);
to
set(hObject, 'String', '0' );
.
An example according to my originally answer. This code gives the user ten chances to enter a correct value.
function test_Callback(hObject, eventdata, handles)
for ii = 1 : 10
test = str2double(get(hObject, 'String'));
if isnan(test)
set(hObject, 'String', 0);
errordlg('Input must be a number','Error');
elseif gt(test,1)
handles.backup.test = test;
guidata(hObject,handles);
break
elseif gt(1,test)
set(hObject, 'String', '0');
errordlg('Input must be greater than 0','Error');
end
end
end
3 comentarios
per isakson
el 21 de Feb. de 2013
- one way would be to make errordlg non-modal and hope that the user sets a legal before before responding to errordlg - might confuse the user (not tested)
- a better way would be to let test_Callback return a logical value is_ok and
if is_ok
[filename, pathname, Index] = ...
uigetfile({'*.txt';},['Select the File to load'],...
'\\MyDocuments\User');
else
some_dialog('enter a positive integer and try again')
end
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!