Настройка фокуса виджета в Gtkada

Я пытаюсь создать простую тестовую программу в Gtkada, чтобы открыть диалоговое окно при выходе из определенного текстового поля. Я справился с этой частью, но у меня проблемы с возвратом фокуса в исходное текстовое поле при нажатии кнопки «ОК» в диалоговом окне. Общая идея заключается в том, что пользователь вводит что-то в текстовое поле, и когда они щелкают / вкладываются из поля (событие фокусировки), выполняется простая буквенно-цифровая проверка. Если проверка не удалась, пользователь получает предупреждение с помощью диалогового окна, и фокус возвращается в текстовое поле, в которое он ввел ошибочные данные. Все, что мне нужно, - это простой пример того, как вернуть фокус в текстовое поле, когда вы закрываете диалоговое окно, которое щелкает из первоначально вызванного текстового поля. В Gtkada ... Использую Gtkada версии 2.2. Я не могу изменить версию Gtkada или использовать другую программу или язык! Весьма признателен!

Тим


person T.Harper1981    schedule 02.02.2016    source источник
comment
Разместите здесь простейший код, показывающий эту проблему ...   -  person user_1818839    schedule 02.02.2016
comment
С тех пор была встреча, и было решено, что мы собираемся провести всю пачку валидационной проверки одним нажатием кнопки. Сдвиг / настройка фокуса не требуется. Спасибо!   -  person T.Harper1981    schedule 02.02.2016


Ответы (1)


Самым элегантным решением с точки зрения графического интерфейса пользователя является выполнение проверки leave_event в каждом поле ввода, и, если это не удается, отобразить сообщение об ошибке (красного цвета или что-то подобное) рядом с полем. Но не отображайте диалоговое окно и не устанавливайте фокус на конкретное поле, это может помешать тому, что пытается сделать пользователь (представьте: я ввожу неправильный адрес электронной почты, нажимаю вкладку, получаю диалоговое окно, которое я не читаю (как и большинство других). users), начните вводить мое имя в следующем поле, но поскольку фокус вернулся к адресу электронной почты, я не переопределил его и потерял предыдущий ввод).

Если вы все еще хотите захватить фокус, Gtk.Widget.Grab_Focus - это та процедура, которая вам нужна.

person manuBriot    schedule 02.02.2016
comment
Спасибо за ответ. К сожалению, я сам пришел к большинству из этих выводов, но я довольно ограничен в том, что я могу произвести за 30 лет формальных соглашений. Ребята, которые собираются использовать эту панель Simulator, ожидают определенной корреляции между тем, что я создаю, и предыдущими панелями Sim. Я считаю, что сейчас мы собираемся выполнить проверку действительности нажатия кнопки «Все в одном» и «Отправить» и диалоговое окно с сообщением, сообщающим пользователю, какие поля ошибочны. Никакого изменения фокуса поля не произойдет, так что не стоит беспокоиться о том, где пользователи ожидают увидеть курсор. Спасибо еще раз - person T.Harper1981; 02.02.2016