#user-interface #matlab #user-input #edit
#пользовательский интерфейс #matlab #пользовательский ввод #Редактировать
Вопрос:
Всем привет, я создаю графический интерфейс, в котором есть окно редактирования, ожидающее, когда пользователь введет имя.
В настоящее время я заставляю пользователя указывать законное имя с помощью этого кода :
NewPNUName = get(handles.nameOfNewPNU, 'String');
if ( isempty(NewPNUName) ||...
strcmp(NewPNUName,'Enter the name for the new PNU') )
errordlg('Please enter a name for the new PNU.');
elseif (~ischar(NewPNUName(1)))
errordlg('The PNU name should start with a letter.');
else
handles.NewPNUName = NewPNUName;
end
if (~isempty(handles.NewPNUName))
% Do all the things needed if there is a legit name
end
То, что он делает, ничего не дает, если пользователь не написал законное имя.
Что я хочу, так это создать всплывающее окно с окном редактирования, в котором пользователю предлагается снова ввести желаемое имя, пока это не станет законным именем.
Спасибо за помощь!
РЕДАКТИРОВАТЬ: следуя совету @ woodchips, я исправил свой код до следующего:
NewPNUName = get(handles.nameOfNewPNU, 'String');
ValidName = ~isempty(NewPNUName) amp;amp; isletter(NewPNUName(1)) amp;amp;...
~strcmp(NewPNUName,'Enter the name for the new PNU');
while (~ValidName)
if ( isempty(NewPNUName) ||...
strcmp(NewPNUName,'Enter the name for the new PNU') )
NewPNUName = char(inputdlg('Please enter a name for the new PNU.','No name entered'));
elseif (~isletter(NewPNUName(1)))
NewPNUName = char(inputdlg('The name of the new PNU should start with a letter. Please enter a new name',...
'Invalid name entered'));
else
allConds = 'are met'
end
ValidName = ~isempty(NewPNUName) amp;amp; isletter(NewPNUName(1)) amp;amp;...
~strcmp(NewPNUName,'Enter the name for the new PNU');
end
Ответ №1:
Итак, поместите цикл while вокруг блока кода, который генерирует поле inputdlg. Установите условие в цикле while таким, чтобы результат был допустимым.