Очистка буфера клавиатуры - как?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ёрик
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.01.2005 (Ср) 13:18

Очистка буфера клавиатуры - как?

Сообщение Ёрик » 13.06.2005 (Пн) 14:09

Есть две формы, первая вызывает вторую модально. Вторая форма закрывается по нажатию кнопки Enter. Этот самый Enter почему-то попадает в KeyUp первой формы, хотя не хотелось бы. Хочется сделать что-то вроде чистки буфера клавиатуры в OK_Clicked второй формы, если, конечно, это нельзя сделать какими-либо более цивильными способами.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.06.2005 (Пн) 15:18

Нет чтоб подумать об изменении дизайна... Нет, вместо этого надо лезть в систему и исправлять там.
Ты не думал о том, чтобы закрывать форму в событии keyup?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ёрик
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.01.2005 (Ср) 13:18

Сообщение Ёрик » 14.06.2005 (Вт) 11:36

GSerg писал(а):Нет чтоб подумать об изменении дизайна... Нет, вместо этого надо лезть в систему и исправлять там.
Ты не думал о том, чтобы закрывать форму в событии keyup?


Я с удовольствием подумаю об изменении дизайна, но вот беда, кнопка ОК на диалоге дефолтная, и KeyUp при нажатии Enter не приходит.. приходит OK_Click и усё. И Enter спокойненько идет дальше в кей-ап вызывающей формы...

Ёрик
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.01.2005 (Ср) 13:18

Сампель

Сообщение Ёрик » 17.06.2005 (Пт) 11:12

Приклепляю сампл-приложение, на котором ясно видно, что никакое клавиатурное событие по нажатию ентера не приходит в форму с дефолтной кнопкой.
Есть ли какие-нибудь идеи?

Спасибо.
Вложения
keyup.zip
(1.61 Кб) Скачиваний: 25

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 17.06.2005 (Пт) 20:42

Хм... Действительно... Никогда такого не видел..

Попробывал KeyPreview менять. Всё равно такая же лажа.

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 26.06.2005 (Вс) 8:01

Если я правильно понял суть вопроса, то можно
уравнять значения по адресам памяти 0040:$1C и 0040:$1A
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.06.2005 (Вс) 11:02

CORBA писал(а):Если я правильно понял суть вопроса, то можно
уравнять значения по адресам памяти 0040:$1C и 0040:$1A

Неправильно понял. У человека не DOS.
Изображение

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 26.06.2005 (Вс) 20:21

ALX_2002 писал(а):Хм... Действительно... Никогда такого не видел..

Попробывал KeyPreview менять. Всё равно такая же лажа.

а я Сталкивался 8)
Это можно получить, если, например, на пустой форме вставить код
Код: Выделить всё
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then MsgBox "Нажмите Ентер"
End Sub 

получается замкнутый круг.
---
Поскольку на Форме1 события Form_KeyDown не происходит, а только Form_KeyUp - как вариант: Отлавливать на FORM1 только нажатие Энтера, а отжатие - игнорировать:
Код: Выделить всё
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then
        KeyCode = 0
        Exit Sub
    End If
Msgbox "Нажата клавиша с кодом " & KeyCode
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyReturn Then
        MsgBox "Нажат Энтер"
    End If
End Sub

Private Sub Form_Load()
    Me.Show
    Form2.Show vbModal, Me
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Yandex-бот и гости: 181

    TopList