Интересное поведение контрола при передачи фокуса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ZOD
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 24.03.2004 (Ср) 19:54
Откуда: Barnaul

Интересное поведение контрола при передачи фокуса

Сообщение ZOD » 14.01.2009 (Ср) 12:45

Ситуация такая: есть контрол, в котором вводятся цифры и еще куча других контролов на форме.
Задача: сделать так, чтобы при нажатии на цифровые клавиши в любом месте формы (фокус м.б. на любом элементе) фокус передавался в цифровой текстбокс и цифры вводились в него.
Все это сделано так: у формы ставим Keypreview в true, вылавливаем нажатие клавиш, переключаем фокус на текстбокс, SendKey-ем посылаем нажатие цифры. Загвоздка вот в чем: если быстро нажать, скажем, 4 затем 5, то 4 пропечатывается, а 5 нет. Если подождать с полсекунды и больше, то все ок. В чем м.б. загвоздка?
Код: Выделить всё
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode >= vbKey0 And KeyCode <= vbKey9 Then
        If Me.ActiveControl.Name <> "txtComments" And Me.ActiveControl.Name <> "txtNumber" Then
            txtNumber.SetFocus
            Call SendKeys(Chr$(KeyCode))
        End If
    End If
End Sub


alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Интересное поведение контрола при передачи фокуса

Сообщение alibek » 14.01.2009 (Ср) 12:49

...
.SetFocus
SendKeys ..., True
KeyCode = 0
...

Попробуй так.
Lasciate ogni speranza, voi ch'entrate.

ZOD
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 24.03.2004 (Ср) 19:54
Откуда: Barnaul

Re: Интересное поведение контрола при передачи фокуса

Сообщение ZOD » 14.01.2009 (Ср) 14:10

Все равно не работает :(
Странно как-то. Обработки после изменения значения практически не выполняется, задержек и "потерь нажатий" быть не должно.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Интересное поведение контрола при передачи фокуса

Сообщение Хакер » 14.01.2009 (Ср) 15:09

Ты хочешь странного: чтобы программа работала вопреки правилам и концепциям Windows, но работала правильно. Такое редко бывает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ZOD
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 24.03.2004 (Ср) 19:54
Откуда: Barnaul

Re: Интересное поведение контрола при передачи фокуса

Сообщение ZOD » 15.01.2009 (Чт) 10:32

Почему же она работает вопреки концепциям Windows?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Интересное поведение контрола при передачи фокуса

Сообщение Денис » 15.01.2009 (Чт) 11:23

ZOD писал(а):Почему же она работает вопреки концепциям Windows?

Мне так кажется, что под концепцией понимается сама концепция фокуса и перехода между контролами с его помощью. Парадигма автоматического перескакивания фокуса при активизации числового ввода с клавиатуры не вписывается в эту концепцию.
Рекомендуется пересмотреть дизайн программы таким образом, чтобы при включении режима ввода чисел фокус устанавливался в первое (левое-верхнее) поле ввода и перемещался при помощи клавиши Tab (закрытие режима по нажатию Клавиши Enter). Это надо вдолбить в головы юзеров, а не плясать под их дудку.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Интересное поведение контрола при передачи фокуса

Сообщение Andrey Fedorov » 15.01.2009 (Чт) 13:12

Ловим Form_KeyDown (KeyPreview должно быть включено) если нажата цифра и ActiveControl не цифровое поле то делаем KeyCode = 0, присваиваем цифру цифровому полю (типа МоеПоле.Text = 5), после чего передаем фокус этому цифровому полю...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

ZOD
Обычный пользователь
Обычный пользователь
 
Сообщения: 75
Зарегистрирован: 24.03.2004 (Ср) 19:54
Откуда: Barnaul

Re: Интересное поведение контрола при передачи фокуса

Сообщение ZOD » 15.01.2009 (Чт) 14:34

Andrey Fedorov
Абсолютно так сейчас все и работает :) Включая непонятный глючок.

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Интересное поведение контрола при передачи фокуса

Сообщение dr.MIG » 15.01.2009 (Чт) 15:09

ZOD писал(а):Абсолютно так сейчас все и работает :) Включая непонятный глючок.

Не абсолютно так. У тебя сейчас обрабатывается событие KeyUp, а тебе рекомендуют обрабатывать KeyDown, это приведёт к тому, что сразу после нажатия клавиши до её отпускания, фокус попадёт в цифровое поле и ввод следующей цифры не будет проигнорирован.
Salus populi suprema lex


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44

    TopList