Как обнаружить потерю фокуса от объекта редактирования текста? - PullRequest
5 голосов
/ 23 марта 2012

Это моя первая попытка создать графический интерфейс в MATLAB. До сих пор я не смог найти способ определить, когда фокус переносится с редактирования текста на какой-либо другой объект. Мне нужна такая функциональность, чтобы я мог на месте проверить пользовательский ввод и изменить цвет фона редактирования текста на красный, если ввод сформирован неправильно.

Другими словами, было бы очень удобно, чтобы конечный пользователь мог написать свое выражение в текстовом редакторе, затем нажать клавишу Tab, чтобы перейти к следующему текстовому редактированию, и в то же время увидеть красный фон в первое редактирование текста в случае проблем с вводом.

Я подумал о нескольких альтернативах для проверки пользовательского ввода, но они не так удобны, как указано выше. Как я могу реализовать что-то подобное?

1 Ответ

7 голосов
/ 23 марта 2012

Когда вы нажимаете клавишу табуляции, чтобы переместить фокус с редактируемого текстового поля на другой объект uicontrol , будет вызвана функция обратного вызова редактируемого текстового поля.Таким образом, вам просто нужно поместить код для проверки текста и предупреждения пользователя о проблеме в функции обратного вызова вашего редактируемого текстового uicontrol.

Обратите внимание, что документация гласит, чтообратный вызов для uicontrol также будет вызываться при следующих условиях:

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

  • Для однострочного редактируемого текстового поля нажмите Введите .

  • Для многострочного редактируемого текстового поля нажмите Ctrl + Введите .

Например, вот очень простая реализация обратного вызова, которая установит для цвета фона текста значение по умолчанию серый, если строка имеет значение 'yes' или 'no'или красным, если строка является чем-то еще:

function callback_fcn(hSource, eventData)
  if ismember(get(hSource, 'String'), {'yes', 'no'})
    set(hSource, 'BackgroundColor', [0.941176 0.941176 0.941176]);
  else
    set(hSource, 'BackgroundColor', 'r');
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...