Prompting Error for user input

1 visualización (últimos 30 días)
T
T el 14 de Feb. de 2013
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
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?
per isakson
per isakson el 20 de Feb. de 2013
Change
for ii = 1 : 10
to
while true

Iniciar sesión para comentar.

Respuesta aceptada

per isakson
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
per isakson el 20 de Feb. de 2013
How do you want the program to behave?
per isakson
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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre App Building en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by