Как закрывать форму (UserForm) клавишей Esc?

Программирование на Visual Basic for Applications
asemynoff
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.09.2005 (Пт) 8:29

Как закрывать форму (UserForm) клавишей Esc?

Сообщение asemynoff » 02.09.2005 (Пт) 8:55

Как закрывать форму (UserForm) клавишей Esc?

Booozer
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 30.08.2005 (Вт) 17:41
Откуда: Москва

Сообщение Booozer » 02.09.2005 (Пт) 10:28

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

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Me.Hide
End Sub

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 02.09.2005 (Пт) 10:50

А ты сам-то пробовал этот код запускать? По какой-то причине не работают на пользовательских формах (по крайней мере в экселе) ни KeyPress, ни KeyDown, ни KeyUp.
"There's more than one way to do it!"

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

Сообщение alibek » 02.09.2005 (Пт) 10:56

А если сделать KeyPreview=True?
Lasciate ogni speranza, voi ch'entrate.

Tuco
Постоялец
Постоялец
 
Сообщения: 508
Зарегистрирован: 18.06.2003 (Ср) 16:37
Откуда: Подмосковье

Сообщение Tuco » 02.09.2005 (Пт) 11:53

А это куда впихнуть?
"There's more than one way to do it!"

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 02.09.2005 (Пт) 12:57

Command1.cancel=true
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

asemynoff
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.09.2005 (Пт) 8:29

Сообщение asemynoff » 02.09.2005 (Пт) 13:02

Booozer писал(а):
Код: Выделить всё
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Me.Hide
End Sub


Я попробывал, но ничего не происходит. Я так думаю, что это из-за того, что Visual Basic каким-то образом отличается от Visual Basic for Application. Нет?

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

Сообщение alibek » 02.09.2005 (Пт) 13:05

Мда. И правда, KeyPreview нет.
Можно попробовать через API, если вариант Sebasа не применим.
Lasciate ogni speranza, voi ch'entrate.

Димитрий
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 194
Зарегистрирован: 26.01.2005 (Ср) 22:47
Откуда: Волгоград

Сообщение Димитрий » 02.09.2005 (Пт) 21:16

Разместите на форме кнопку (можно её и спрятать). Установите её свойство Сancel как True. Напишите код для нажатия кнопки:
Код: Выделить всё
Private Sub CommandButton1_Click()
  Unload Me
  Set UserForm1 = Nothing
End Sub

Ваша задача решена.

Booozer
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 30.08.2005 (Вт) 17:41
Откуда: Москва

Сообщение Booozer » 05.09.2005 (Пн) 11:06

Ситуация следующая. При нажатии клавиши на клавиатуре. Активный элемент формы перехватывает нажатие. Поэтому мой выше приведенный код не срабатывает при наличии каких-либо элементов управления на форме. Можно использовать например следующее:
Код: Выделить всё

Private Sub CommandButton1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then ActiveControl.Parent.Hide
End Sub

Т.к. пользовательская форма не имеет свойства KeyPreview (т.е. не имеет возможности перехватывать нажатие клавиш) либо использовать API.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 05.09.2005 (Пн) 14:12

Сделай процедуру в модуле формы:
Private Sub Oll_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Me.Hide
End Sub

И пропеши ее запуск во всех KeyPress объектов формы и в KeyPress самой формы, понял?..

asemynoff
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 02.09.2005 (Пт) 8:29

Сообщение asemynoff » 06.09.2005 (Вт) 6:38

Это сработало:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 27 Then Unload UserForm1
End Sub

При запуске формы, фокус всегда на TextBox1. Я на всякий случай в следующий элемент добавил такую же фишку.

Большое спасибо Booozer'у, Vitaly 1 и всем остальным...

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 06.09.2005 (Вт) 8:39

нды, без вазелина никак)))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в VBA

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

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

    TopList