Страница 1 из 1

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

Добавлено: 10 авг 2008, 00:02
Aent
Есть пользовательская форма. На ней текстовое поле 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 потерял :(

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

Добавлено: 10 авг 2008, 08:25
VictorM
Aent, здравствуйте.
Да, интересно, может продублировать это сообщение в "Полезностях"?
Или вообще создать тему типа "Интересные (нужные) или еще как, коды"?

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

Добавлено: 10 авг 2008, 16:43
Aent
Ну не знаю. Не попадёт ли туда тогда четверть форума ? ;)
Возможно достаточно поиска ;)
Правда вот как то поиск на форуме последние пол года криво работает :(
Не находятся старые топики 2006 года :(

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

Добавлено: 24 авг 2008, 12:13
Aent
Это не глюк это я протупил со страшной силой :(
Правильный код

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

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 нужно обнулить. Иначе его обрабатывает системная библиотека ...