2008-10-13 3 views
2

У моей компании большое приложение, написанное на VB6, и по историческим причинам приложение перемещается с помощью клавиши Enter, а не с помощью клавиши Tab. Я не знаю VB6, но я знаю, что они в настоящее время устанавливают фокус для каждого элемента управления в большом элементе select в событии KeyUp формы, если это EnterKey. Теперь мы начинаем конвертировать в .NET и должны постоянно поддерживать согласованность, чтобы пользователям не приходилось использовать TAB в некоторых формах, а ENTER - на других. Я хочу написать формы предков, которые будут автоматически вводиться из поля в поле вместо табуляции. Сотрудник сказал мне, что способ, которым это делается в VB6, состоит в том, чтобы обрабатывать кнопки не на событии CLICK, а в событии KEYUP. Мне нужно продолжать делать это, чтобы у меня не осталось оставшихся событий KeyUp, чтобы вернуться к VB6 после завершения моей формы. Порядок событий для кнопокКак перемещаться между полями с помощью клавиши ввода

  1. button_PreviewKeyDown
  2. button_Click (по-видимому, заменив событие KeyPress)
  3. form_KeyUp
  4. button_KeyUp

Я создал следующие формы:

  • В событии KeyUp формы ANCESTOR, c heck, чтобы увидеть, если это ключ ввода. Если это ключ ввода, а активный элемент управления не является кнопкой, он перемещается в следующее поле в порядке вкладок. В противном случае он игнорирует ключ и позволяет управлять им. Если это кнопка, предок не предполагает знать, куда кнопка хочет управлять, потому что она будет зависеть от того, что кнопка хочет делать, когда ее «щелкают».
  • На кнопках формы CHILD событие click ничего не делает, и обработка дублируется в событии KeyUp и событии MouseClick.
  • Форма ANCESTOR имеет защищенный Boolean, EatKeyUp, который может быть установлен True для CHILD. Это используется, когда дочерняя форма должна отправлять MessageBox, потому что, если пользователь вводит кнопку OK в MessageBox, все еще остается оставшееся событие KeyUp, которое будет использоваться формой предка.

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

ответ

1

Лучшая реализация заключается в использовании свойства AcceptButton формы, установите его на скрытую кнопку где-нибудь в форме. Затем, когда пользователь нажимает кнопку, нажимается кнопка, а затем в событии нажатия кнопки вы делаете код для перехода к следующему элементу управления. Чтобы выбрать следующий элемент управления, вы можете просто выбрать список элементов.

Самый простой способ сделать это - создать базовую форму, а затем в ней есть кнопка и логика AcceptButton.

+1

Я не пробовал это, потому что я больше не занимаюсь этой работой (ура!). Но это выглядит разумно - спасибо! – CindyH

2

Возможно, теперь вы конвертируете свое время, чтобы выдвинуть идею придерживаться стандартов Windows.

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

+0

Я знаю, что Навигация по окнам не предназначен для этого. МАЙ, мне известно. Но у нас не может быть одного экрана из сотен, плавающих с вкладками, а остальные - с входами.Не было бы целесообразно преобразовать все остальные в вкладки, а затем вернуться назад и преобразовать в .NET. – CindyH

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