Страницы: 1
RSS
Эмуляция события в UserForm
 
Здравствуйте!

Проблемка вроде бы простенькая: в UserForm среди прочего хлама есть TextBox. Нужно, чтобы по TextBox_Enter выполнялось то же, что и по клику на одну из кнопок. Дублировать в TextBox_Enter код из CommandButton_Click по некоторым причинам не хочется. Казалось бы, логично вызвать CommandButton_Click внутри TextBox_Enter. А не получается...
Если это нельзя сделать, м.б. можно как-то эмулировать событие CommandButton_Click в коде TextBox_Enter ?
 
Можно. Так
Код
CommandButton_Click

Или так
Код
Call CommandButton_Click
 
И то, и другое попробовал первым делом. Ничего не происходит.
 
Точно не вызывается событие? Или может вызывается, но не выполняет того, что Вы от него ожидали? Пробовали через отладку и точки останова пошагово пройти?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Да. Ставил точку останова внутрь CommandButton_Click. В первый раз выскакивает почему-то при инициализации формы. При клике на кнопку тоже васкакивает. А на TextBox_Enter почему-то нет.

Даже убрал Private из объявлений функций, хотя ИМХО это не требуется, они же на одном листе.

Excel 2003, если это имеет какое-то значение.
 
Наверное, не TextBox_Enter должно быть, а TextBox1_Enter где вместо 1 должен стоять соответствующий номер. На форме станьте на этот текстбокс и нажмите F4 - вверху в поле (Name) будет записано правильное имя контрола.
Если что, приложите проект с одной этой формой - посмотрим
Изменено: ZVI - 29.01.2013 14:41:33
 
Меня смутила эта фраза:
Код
они же на одном листе
именно на листе? Если это ТекстБокс на листе(элемент ActiveX), то у него вообще нет события Enter. Следовательно он и вызываться не будет ни при каких обстоятельствах.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist пишет:
именно на листе? Если это ТекстБокс на листе(элемент ActiveX), то у него вообще нет события Enter. Следовательно он и вызываться не будет ни при каких обстоятельствах.

Я не корректно выразился, сорри. Я имел ввиду, как раз то, что это в одной форме. В смысле Private это ИМХО то же самое, что в одном модуле. Или я не прав?
 
Цитата
ZVI пишет:
Наверное, не TextBox_Enter должно быть, а TextBox  1  _Enter где вместо 1 должен стоять соответствующий номер. На форме станьте на этот текстбокс и нажмите F4 - вверху в поле (Name) будет записано правильное имя контрола.
Если что, приложите проект с одной этой формой - посмотрим
Я пишу TextBox и Button только здесь для простоты. На самом деле там мои собственные имена. И соответствующие процедуры организует (в смысле объявляет: Sub...End) редактор форм. Так что тут вряд ли может быть засада.

Прямо сейчас выложить не могу. Вечером попробую выложить. Если до этого не прояснится.
 
Вот файл с этой формой.
Если ввести что-то в поле "НазвТекст" и кликнуть по "НазвИскать", текст из "НазвТекст" скопируется в поле "АртикАртикул". То же самое должно БЫ произойти, если после ввода текста, нажать Enter не выводя фокус из поля.

Смысла во всем этом искать не надо:) Это чисто отладка.
 
Из умной книжки цитирую:

Цитата
Enter - Occurs right before the control receives the focus from another control on the same
userform.
Получается, что ENTER не имеет никакого отношения к нажатию клавиши с одноименным названием.
В Вашем случае воспользуйтесь вот таким решением
Код
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then CommandButton1_Click
End Sub
 
Цитата
dik5 пишет:
нажать Enter не выводя фокус из поля
Это будет Exit, а не Enter!  ;)
Enter - это когда в текстбокс фокус попадает.
 
dik5, скорее всего Вы ошибаетесь с определением Enter (как предположили выше). Enter - в данном случае "ВХОД" в контрол: когда каким-либо способом ему передаётся фокус (становится активным).
 
Цитата
Sergei_A пишет:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then CommandButton1_Click
End Sub
Да-а... Приблизительно понятно. И работает! Спасибо!
Насчет "Enter" вообще-то есть логика...

Если можно, "в догонку" еще вопрос: почему при инициализации формы срабатывает Sub TextBox_Enter? Любопытно просто.
 
Цитата
dik5 пишет:
почему при инициализации формы срабатывает Sub TextBox_Enter?
Проверьте - скорее всего этот контрол стоит первым по индексу.
 
Цитата
RAN пишет:
Цитата
dik5 пишет:
нажать Enter не выводя фокус из поля
Это будет Exit, а не Enter! ;)
Enter - это когда в текстбокс фокус попадает.

Ну тык, клавиша-то Enter называется, значит и процедура должна быть с тем же названием.  Логично ведь? :D  :D  
На самом деле у меня такая мысль возникала, но я ее прогнал из-за вышеописанной логики :D
А вот то, что при нажатии Enter фокус уходит из окна, я вижу, но не уверен, что это всегда так. Если это правило для TextBox'ов, то по Exit действительно проще и приятнее, чем по KeyDown.
 
Цитата
dik5 пишет:
Ну тык, клавиша-то Enter называется, значит и процедура должна быть с тем же названием.Логично ведь?
Тогда найдите на клавиатуре клавишу DblClick  :)
 
Цитата
Юрий М пишет:
А вот то, что при нажатии Enter фокус уходит из окна, я вижу, но не уверен, что это всегда так
Всегда, когда есть куда. Если на форме ОДИН текстбокс - не уходит.  :)
 
Это Я написал?
 
Цитата
dik5 пишет:
то по Exit действительно проще и приятнее, чем по KeyDown
Вот тут подумайте. Если активировали Textbox, но передумали что либо вводить и перешли на другой элемент формы, то получите срабатывание CommandButton_Click.
 
Цитата
Юрий М пишет:
Цитата
dik5 пишет:
почему при инициализации формы срабатывает Sub TextBox_Enter?
Проверьте - скорее всего этот контрол стоит первым по индексу.
Да, кажется так. И именно ему передается фокус при инициализации формы, вот "Enter" и получается.
Цитата
Sergei_A пишет:
Вот тут подумайте. Если активировали Textbox, но передумали что либо вводить и перешли на другой элемент формы, то получите срабатывание CommandButton_Click.
Тоже логично, однако.

В общем всем спасибо еще раз!
 
Цитата
Юрий М пишет:
Это Я написал?
Конечно нет!  :)
Я долго не мог понять - к чему вопрос...
Я компу не наливал, с чего он тебя приклеил - не знаю!!  :D
Страницы: 1
Наверх