Глюк KeyDown для TextBox (Excel 2003,VBA)

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Есть пользовательская форма. На ней текстовое поле TextBox1. Хочу что бы при нажатии ESC
поле очищалось.

Код: Выделить всё

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      if KeyCode = 27 then 
             TextBox1.Text = vbNullString
      end if
End Sub
Cобытие наступает,отлавливается, но текстбокс не очищается.Вместо этого происходит восстановление текста с отменой ввода с момента получения полем фокуса.
( т.е.очистка поля произойдёт только если перед началом ввода поле было пустым)
Вот такая то ли фича то ли глюк ;)
Проблему решило использование вместо KeyDown - KeyUp

Код: Выделить всё

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      if KeyCode = 27 then 
             TextBox1.Text = vbNullString
      end if
End Sub
Но пока понял в чём дело минут 20 потерял :(
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Aent, здравствуйте.
Да, интересно, может продублировать это сообщение в "Полезностях"?
Или вообще создать тему типа "Интересные (нужные) или еще как, коды"?
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Ну не знаю. Не попадёт ли туда тогда четверть форума ? ;)
Возможно достаточно поиска ;)
Правда вот как то поиск на форуме последние пол года криво работает :(
Не находятся старые топики 2006 года :(
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Это не глюк это я протупил со страшной силой :(
Правильный код

Код: Выделить всё

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      if KeyCode = 27 then 
             TextBox1.Text = vbNullString
             [B]KeyCode = 0[/B]
      end if
End Sub
Т.е, конечно, после обработки KeyCode нужно обнулить. Иначе его обрабатывает системная библиотека ...
Андрей Энтелис,
aentelis.livejournal.com
Ответить