Как обрабатывать порядок табуляции при прогрессивном раскрытии? - PullRequest
1 голос
/ 16 апреля 2009

Я конвертирую приложение VB6 в Winforms, и в VB6 мы часто используем технику, когда определенные текстовые поля становятся видимыми только тогда, когда конкретные значения вводятся в предшествующем текстовом поле.

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

Мы смогли решить эту проблему в VB6, поместив пустой прозрачный пользовательский контроль между двумя текстовыми полями и добавив в TAB в буфере клавиатуры дополнительное событие TAB в пользовательском контроле. Удивительно, но это работает довольно хорошо. Это даже работает, когда вы вернетесь назад. По какой-то причине пользовательский контроль игнорируется, и фокус возвращается к первому текстовому полю. Неудивительно, что я надеюсь, что в Winforms есть лучшее решение.

Кто-нибудь успешно справился с этой ситуацией?

Ответы [ 2 ]

1 голос
/ 29 мая 2009

У меня была похожая проблема в приложении winform, где мне нужно было скрытое текстовое поле для отображения на основе значения предыдущего элемента управления при помещении элемента управления в порядок вкладок, чтобы он получал фокус. Моим первоначальным решением было установить переменную уровня класса, которая будет использоваться вместе с GotFocus и LostFocus (или Enter / Exit) на 2 элементах управления, чтобы определить, был ли потерян фокус от предыдущего элемента управления, и принудительно установить фокус на следующий элемент управления. Это не надежное решение, но все еще вариант.

Мое текущее решение работает намного лучше, хотя. Мне нужно было поставить кнопку поиска для начального контроля. Эта кнопка была в порядке табуляции между двумя элементами управления. Поскольку кнопка будет фокусироваться от первого элемента управления, она будет давать второе время управления, чтобы показать себя при проверке первого элемента управления.

Надеюсь, это поможет.

0 голосов
/ 18 апреля 2009

Я полагаю, что вы найдете, что все "просто работает" в WinForms.

Событие Validat ing запускается до того, как будет принято какое-либо решение о том, какое поле должно получить фокус - это позволяет событию принудительно вернуть фокус к исходному элементу управления в случае сбоя проверки.

Посмотрите подробности события Control.Validating из MSDN, чтобы узнать, какие события инициированы в каком порядке.

В качестве альтернативы, возможно, событие Validating слишком поздно в рабочем процессе - рассматривали ли вы раскрытие элементов управления, как только значение в соответствующем поле подходит, не дожидаясь изменения фокуса? Я сделал это - хотя только с флажками - и пользовательский опыт был идеальным.

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