Пользовательский ввод в графический интерфейс Matlab - PullRequest
1 голос
/ 27 мая 2011

Привет всем, я создаю графический интерфейс, в котором есть поле для редактирования, ожидая, когда пользователь напишет имя.

В настоящее время я заставляю пользователя дать законное имя с этим кодом:

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

1 Ответ

1 голос
/ 27 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...