Почему не работают события нажатия кнопок?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

hement
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2012 (Сб) 7:45

Почему не работают события нажатия кнопок?

Сообщение hement » 20.10.2012 (Сб) 8:03

Пробую устанавливать обработчик события нажатия клавиш клавиатуры для всей формы, но он не срабатывает. KeyUp, KeyDown, KeyPress - ничего не работает. Для отдельных элементов (Button, Edit и т.д.) все работает, а для всей формы - нет. Что я делаю не так?

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Почему не работают события нажатия кнопок?

Сообщение Sam777e » 20.10.2012 (Сб) 17:08

Не работал в NET, а в VB6 у формы есть свойство
KeyPreview

Проверь
Здоровья и удачи

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Почему не работают события нажатия кнопок?

Сообщение Viper » 20.10.2012 (Сб) 19:17

KeyPreview есть и в NET.
Весь мир матрица, а мы в нем потоки байтов!

hement
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2012 (Сб) 7:45

Re: Почему не работают события нажатия кнопок?

Сообщение hement » 20.10.2012 (Сб) 20:51

У меня весь код в .NET. Попробовал KeyPreview, оно тоже не работает.
Интересно, это баг и тут есть какая-то хитрость? :)
Система - XP SP3, VB 2008.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Почему не работают события нажатия кнопок?

Сообщение Viper » 21.10.2012 (Вс) 6:47

hement писал(а):У меня весь код в .NET. Попробовал KeyPreview, оно тоже не работает.
Интересно, это баг и тут есть какая-то хитрость? :)
Система - XP SP3, VB 2008.
Ну если у всех работает, а у тебя не работает, значит есть что-то в твоем коде, работающее не так, как тебе хочется. KeyPreviw работает без каких-либо хитростей.
Весь мир матрица, а мы в нем потоки байтов!

hement
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2012 (Сб) 7:45

Re: Почему не работают события нажатия кнопок?

Сообщение hement » 21.10.2012 (Вс) 14:45

Кажется нашел причину - все работает когда на форме нет элементов или она отключена. А когда она включена, то фокус с элементов формы уже никогда сам не передается форме. Надо что-то мудрить...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Почему не работают события нажатия кнопок?

Сообщение Viper » 21.10.2012 (Вс) 15:06

hement писал(а):Кажется нашел причину - все работает когда на форме нет элементов или она отключена. А когда она включена, то фокус с элементов формы уже никогда сам не передается форме. Надо что-то мудрить...
Смысл KeyPreview как раз и заключается в том, что события нажатия клавиш вначале срабатывают для формы, а потом уже для конкретного элемента управления. Если нет элементов на форме, то теряется смысл KeyPreview. Вот пример простейшего кода. На форме два текстбокса A и B, для формы KeyPreview установлен в True.
Код: Выделить всё
Private Sub FMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Debug.Print("FMain_KeyDown")
    End Sub

    Private Sub FMain_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        Debug.Print("FMain_KeyPress")
    End Sub

    Private Sub FMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
        Debug.Print("FMain_KeyUp")
    End Sub

    Private Sub txtA_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtA.KeyDown
        Debug.Print("txtA_KeyDown")
    End Sub
    Private Sub txtA_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtA.KeyPress
        Debug.Print("txtA_KeyPress")
    End Sub
    Private Sub txtA_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtA.KeyUp
        Debug.Print("txtA_KeyUp")
    End Sub
    Private Sub txtB_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtB.KeyDown
        Debug.Print("txtB_KeyDown")
    End Sub
    Private Sub txtB_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtB.KeyPress
        Debug.Print("txtB_KeyPress")
    End Sub
    Private Sub txtB_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtB.KeyUp
        Debug.Print("txtB_KeyUp")
    End Sub

В окно отладки выводится следующее:

FMain_KeyDown
txtA_KeyDown

FMain_KeyPress
txtA_KeyPress

FMain_KeyUp
txtA_KeyUp

FMain_KeyDown
txtB_KeyDown

FMain_KeyPress
txtB_KeyPress

FMain_KeyUp
txtB_KeyUp

Строго перед событием для текстбокса событие происходит в форме.
Весь мир матрица, а мы в нем потоки байтов!

hement
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 20.10.2012 (Сб) 7:45

Re: Почему не работают события нажатия кнопок?

Сообщение hement » 21.10.2012 (Вс) 17:09

Все понял, это я жутко невнимательный...
Мне сразу написали свойство KeyPreview, а я тогда автоматически подумал на событие KeyPreview(Down)...
Раньше никогда не обращал внимание на это свойство и не думал, что оно существует.
Всем спасибо за помощь!


Вернуться в Visual Basic .NET

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

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

    TopList