Я столкнулся с тупиком при разработке приложения форм Windows. Проблема связана с переключением фокуса между элементами управления и тем, как он играет с сохранением состояний управления формой.UI Issue - Управление состоянием управления и фокусом
В пользовательском интерфейсе имеется три основных элемента управления - два комбинированных блока и кнопка.
- Оба комбинированных поля начинаются с
SelectedItem = null
. - Оба комбинированных блока имеют явный набор допустимых параметров, которые можно выбрать.
- Оба комбинированных блока используют
AutoCompleteMode.SuggestAppend
, аAutoCompleteSource
-AutoCompleteSource.ListItems
. Это означает, что пользователи могут вводить их в поле со списком и вызывать подсказки для выбора значения. - ComboBox # 1 всегда включен.
- ComboBox # 2 отключен, если в ComboBox # 1 не было выбрано определенное значение.
- Кнопка активна только тогда, когда:
- Допустимое значение было выбрано из всегда с поддержкой со списком.
- Правильное значение было выбрано из второго поля со списком IFF В первом поле со списком было выбрано определенное значение. В противном случае его значение игнорируется.
- Во всех остальных случаях он отключен.
Проблема заключается в том, чтобы сделать с помощью клавиатуры и управления фокусом, и как они играют вместе с логикой, связанной с сохранением Enabled
состояния различных органов управления.
В двух словах при выборе значения для комбинированного поля нажатие TAB (чтобы сделать выбор для поля со списком) дает фокус следующему элементу формы (в соответствии с порядком TabIndex) ПЕРЕД логикой для включения/отключить управление.
Логика включения/выключения элементов управления происходит в событиях Validated/Validated соответствующих полей со списком.
Конечным результатом является то, что управление может быть отключено ПОСЛЕ того, как ему был задан фокус.
Например:
- Только ComboBox # 1 включена. ComboBox # 2 и кнопка отключены. Для всех выбранных элементов ComboBox установлено значение null.
- Установить фокус на ComboBox # 1.
- Введите первые несколько букв действительного параметра для окна.
- Press TAB.
При нажатии TAB, кажется, что внимание уделяется следующему элементу управления до SelectedItem изменяется. Бизнес-логику включения или отключения других элементов управления пользовательским интерфейсом нельзя запустить до тех пор, пока не будет изменен SelectedItem.
В идеале, то, что я хочу, это наоборот: фокусировка должна быть сдвинута ПОСЛЕ того, как выбранный элемент управления элемента управления пользовательского интерфейса был обновлен, таким образом была запущена логика обновления состояний элемента управления.
Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу это сделать?
Похоже, что это почти то решение, которое мне нужно. Меня беспокоит только одно, и это чтит TabIndex элементов управления, когда я принудительно фокусирую элемент управления. Мне кажется, что мне нужно здесь сказать, что я знаю, что лучше знаю, и этот контроль нужно сосредоточить. Проблема в том, что если вы используете клавиатурную навигацию, как вы можете различать кого-то нажав TAB и SHIFT + TAB? Я бы хотел только сфокусироваться, если они будут перемещаться по пользовательскому интерфейсу в направлении отключенного управления. – Chris