события текстбокса после SendKeys

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

события текстбокса после SendKeys

Сообщение Space » 07.10.2008 (Вт) 23:55

Почему после SendKeys Text1_KeyDown не вызывается для "АЯ", а Text1_KeyPress вызывается?

Код: Выделить всё
Private Sub Form_Load()
Dim s As String
    s = "09azАЯ"
    SendKeys s
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Debug.Print KeyCode;

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
Debug.Print Chr(KeyAscii);

End Sub

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: события текстбокса после SendKeys

Сообщение Antonariy » 08.10.2008 (Ср) 9:59

Потому что в Text1_KeyDown приходит код клавиши, а не код символа. Исторически сложилось, что коды символов английского алфавита соответствуют кодам клавиш, на которых нарисованы. Отдельных русских клавиш в проекте не было.
Лучший способ понять что-то самому — объяснить это другому.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: события текстбокса после SendKeys

Сообщение Space » 08.10.2008 (Ср) 12:57

если подставить строку s = "09azAZаяАЯ", то получим в Immediate: 48 0 57 9 65 a 90 z 16 65 A 16 90 ZаяАЯ
Откуда для заглавных английских берётся код =16? Я так понимаю, это управляющий символ, означающий верхний регистр клавы. Почему это для русских букв нет кода? Код есть при нажатии 'русских' клавиш, например, для "Ф" должен посылаться код "A", просто SendKeys в VB не может сопоставлять коды русских символов с кодовой таблицей клавиатуры или что-то в этом роде (она просто игнорирует символы, чей ASCII>128).

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

Re: события текстбокса после SendKeys

Сообщение tyomitch » 08.10.2008 (Ср) 13:17

Узри в Object Browser модуль KeyCodeConstants
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: события текстбокса после SendKeys

Сообщение Antonariy » 08.10.2008 (Ср) 16:15

Откуда для заглавных английских берётся код =16? Я так понимаю, это управляющий символ, означающий верхний регистр клавы.
Нет, это код одной из клавиш shift.

Почему это для русских букв нет кода?
Сделай себе плакат "Буквы и кнопки — не одно и то же", пусть повисит пару дней. Кнопки не являются "русскими" или "английскими".

Код есть при нажатии 'русских' клавиш, например, для "Ф" должен посылаться код "A",
Не должен.
просто SendKeys в VB не может сопоставлять коды русских символов с кодовой таблицей клавиатуры
Он не имеет ни малейшего понятия о кодовых таблицах. Он имеет понятие только о кнопках.

(она просто игнорирует символы, чей ASCII>128).
Еще бы. Пересчитай кнопки на клавиатуре.
Лучший способ понять что-то самому — объяснить это другому.


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

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

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

    TopList