Пользовательский ввод в графическом интерфейсе 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) && isletter(NewPNUName(1)) &&...
    ~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) && isletter(NewPNUName(1)) &&...
        ~strcmp(NewPNUName,'Enter the name for the new PNU');
end

person Yarok    schedule 27.05.2011    source источник


Ответы (1)


Итак, поместите цикл while вокруг блока кода, который генерирует поле inputdlg. Установите условие цикла while, чтобы результат был допустимым.

person Community    schedule 27.05.2011