2009-12-21 5 views
0

Я столкнулся с тупиком при разработке приложения форм Windows. Проблема связана с переключением фокуса между элементами управления и тем, как он играет с сохранением состояний управления формой.UI Issue - Управление состоянием управления и фокусом

В пользовательском интерфейсе имеется три основных элемента управления - два комбинированных блока и кнопка.

  • Оба комбинированных поля начинаются с SelectedItem = null.
  • Оба комбинированных блока имеют явный набор допустимых параметров, которые можно выбрать.
  • Оба комбинированных блока используют AutoCompleteMode.SuggestAppend, а AutoCompleteSource - AutoCompleteSource.ListItems. Это означает, что пользователи могут вводить их в поле со списком и вызывать подсказки для выбора значения.
  • ComboBox # 1 всегда включен.
  • ComboBox # 2 отключен, если в ComboBox # 1 не было выбрано определенное значение.
  • Кнопка активна только тогда, когда:
    • Допустимое значение было выбрано из всегда с поддержкой со списком.
    • Правильное значение было выбрано из второго поля со списком IFF В первом поле со списком было выбрано определенное значение. В противном случае его значение игнорируется.
    • Во всех остальных случаях он отключен.

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

В двух словах при выборе значения для комбинированного поля нажатие TAB (чтобы сделать выбор для поля со списком) дает фокус следующему элементу формы (в соответствии с порядком TabIndex) ПЕРЕД логикой для включения/отключить управление.

Логика включения/выключения элементов управления происходит в событиях Validated/Validated соответствующих полей со списком.

Конечным результатом является то, что управление может быть отключено ПОСЛЕ того, как ему был задан фокус.

Например:

  1. Только ComboBox # 1 включена. ComboBox # 2 и кнопка отключены. Для всех выбранных элементов ComboBox установлено значение null.
  2. Установить фокус на ComboBox # 1.
  3. Введите первые несколько букв действительного параметра для окна.
  4. Press TAB.

При нажатии TAB, кажется, что внимание уделяется следующему элементу управления до SelectedItem изменяется. Бизнес-логику включения или отключения других элементов управления пользовательским интерфейсом нельзя запустить до тех пор, пока не будет изменен SelectedItem.

В идеале, то, что я хочу, это наоборот: фокусировка должна быть сдвинута ПОСЛЕ того, как выбранный элемент управления элемента управления пользовательского интерфейса был обновлен, таким образом была запущена логика обновления состояний элемента управления.

Есть ли у кого-нибудь какие-либо предложения относительно того, как я могу это сделать?

ответ

0

Можете ли вы сфокусировать фокус на SelectedIndexChanged/SelectedValueChanged для соответствующего поля со списком? Возможно, вы захотите проверить, где находится фокус, и только сдвигаться, если он находится в отключенном элементе управления.

+0

Похоже, что это почти то решение, которое мне нужно. Меня беспокоит только одно, и это чтит TabIndex элементов управления, когда я принудительно фокусирую элемент управления. Мне кажется, что мне нужно здесь сказать, что я знаю, что лучше знаю, и этот контроль нужно сосредоточить. Проблема в том, что если вы используете клавиатурную навигацию, как вы можете различать кого-то нажав TAB и SHIFT + TAB? Я бы хотел только сфокусироваться, если они будут перемещаться по пользовательскому интерфейсу в направлении отключенного управления. – Chris

Смежные вопросы