Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 10.04.2007
Сообщений: 96
1

Enter вместо Tab

01.06.2007, 02:24. Показов 2555. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
HI АLL

Не подскажет ли кто где ошибка?
------------------------------------------------
Совет 51. http://www.microsoft.ru/msdn/l... .htm#Start

При вводе данных в текстовые поля формы бывает не очень удобно пользоваться клавишей Tab. Например, вы привыкли, что ввод данных в текущее поле заканчивается нажатием Enter. Чтобы сделать это, добавьте такой код для нужного элемента управления:

Visual Basic
1
2
3
4
5
6
Sub Text1_KeyPress (KeyAscii As Integer)
  If KeyAscii = 13 Then   ' клавиши Enter
    SendKeys 'Tab'
    KeyAscii = 0
  End If
End Sub
------------------------------------------------
У меня он в Text1 печатает текст Tab.

Или может, кто подскажет, как сделать так чтобы при нажатии на Enter из поля Text1
осуществлялся переход в Text1?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2007, 02:24
Ответы с готовыми решениями:

По Enter как по Tab? (одним махом)
Не ужели нельзя как-нибудь проще? Например в Access это задается в свойстве формы. А так...

Переход между полями при нажатии ENTER, также как по TAB?
Есть форма с несколькими полями. У каждого поля есть Tab-индекс, т.е. порядок, в котором будет...

Tab вместо Enter (FireFox)
Хотелось бы реализовать на JS следующие возможности (в рамках формы): 1. Клавиша Enter отвечает за...

Enter вместо Tab при работе с Datagridview
Я программирую в .NET недавно. Мне надо добавить одну запись и заполнить данные в гриде. Юзеры не...

15
VladK
01.06.2007, 05:00 2
Visual Basic
1
2
3
4
5
6
Sub Text1_KeyPress(KeyAscii As Integer)
   If KeyAscii = vbKeyReturn Then
      SendKeys '{Tab}'
      KeyAscii = 0
   End If
End Sub
0 / 0 / 0
Регистрация: 10.04.2007
Сообщений: 96
01.06.2007, 11:18  [ТС] 3
Большое спасибо VladK! Сильно помогло!
P.S. Очепятался: осуществлялся переход в Text2?
0
VladK
01.06.2007, 21:32 4
Да, репеход должен быть в Text2
Foxtrot
02.06.2007, 04:21 5
А не проще было порядок фокусов расставить?
Пример:
Visual Basic
1
2
3
4
sub ...
if keyascii=13 then
text2.getfocus
end sub
Foxtrot
02.06.2007, 04:23 6
ё! Большие сорьки! В строке
Visual Basic
1
2
if keyascii=13 then 
text2.getfocus
надо писать
Visual Basic
1
2
if keyascii=13 then
text2.setfocus
VladK
02.06.2007, 07:46 7
Конечно проще. Но просьба была найти ошибку в приведенном коде.
VladK
02.06.2007, 08:26 8
Большие сорьки тоже. Ваш пример был необходим. Кстати, если на форме много текстовых окон, то следует действовать несколько иначе. Пример с 4 текстовыми окнами Text1,Text2,Text3,Text4:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Form_Load()
   Me.KeyPreview = True
End Sub
 
Private Sub Form_KeyPress(KeyAscii As Integer)
   If KeyAscii = vbKeyReturn Then
      Select Case ActiveControl.Name
         Case Text1
              Text2.SetFocus
         Case Text2
              Text3.SetFocus
         Case Text3
              Text4.SetFocus
         Case Text4
              Text1.SetFocus
      End Select
   End If
End Sub
Mavr
03.06.2007, 08:13 9
Способ с SendKeys'ом лучше, не надо городить Select Case (а если 20 контролов), фокус автоматом перейдет на следующий в последовательности перехода контрол.
0 / 0 / 0
Регистрация: 26.03.2007
Сообщений: 238
03.06.2007, 11:12 10
Насчёт Sendkey'я - есть о чём не согласиться.
А так, я тоже этой проблемой занимался - и вот к какому выводу пришёл ('концептуально' :-))):
1. Необходимо на форме установить KeyPreview = true (об этом уже писали)
2. В Form'е сделать приватный массив элементов из названий контролей. В Form_Load'e - заполнить Например : aСontrl = ('Text1','Tex2',...)
И тут же загнать табиндекс - циклом. (Согласно порядка в массиве)
3. В Form_KeyDown универсальный обработчик (пример, в жизни несколько отличается, в зависимости от желаний и требований.... ):
if KeyCode = 13 Then
dl = 0
dl = Screen.ActiveControl.TabIndex
If dl < UBound(aСontrl) - 1 Then dl = dl + 1 Else dl = 0
Me.Controls(aСontrl(dl)).SetFocus
end if
В Form_KeyPress можно добавить код
if KeyAscii = 13 then keyascii=0
Этим 'убивается' дальнейшее реагирование контроля на нажатый энтер.
Плюс во всём этом в том, что не надо обрабатывать событие в каждом контроле, соответственно для приложение можно сделать паблик саб или фанкшион и передавать туда форму и там обрабатывать.
Мнения.....pls.
0
0 / 0 / 0
Регистрация: 09.05.2007
Сообщений: 130
03.06.2007, 15:10 11
To Ian

Ne sovsem uveren, no, po mojemu, _KeyDown budet proishodit' ne dlja formy, a dlja togo controla, na kotorom Fokus.

Moschet ja ne prav, kone4no. No v4era mne prischlos' 'u4it'' formu 'uznavat'' knopki dlja upravlenija kursorom (37,38,39,40) i dlja Form'y sobytije 'KeyDown' ne nastupalo. A kogda ja povesil sootvetstvujuschij makros na otdel'nyje control'y - vse stalo OK.

Esli ja ne prav - please, skaschite v 4em. A to esli by forma byla na 40 controlov, to nazna4at' etu proceduru kaschdomy bylo by tosklivo...
0
0 / 0 / 0
Регистрация: 26.03.2007
Сообщений: 238
03.06.2007, 15:39 12
2Похомов. Если установить проперть на Form'e KeyPreView=True. То при нажатии клавиши в контроле события происходят примерно так (для всех 'буквенных' контролей form_keydown,form_updown,form_keypress ну и дальше на контроль). И то, что я написал - это работает и не в одном приложеннии
0
0 / 0 / 0
Регистрация: 09.05.2007
Сообщений: 130
03.06.2007, 15:51 13
Spasibo! Vesch' o4en' dlja menja poleznaja.
0
VladK
03.06.2007, 16:08 14
To pakhomov_a:
Cобытие _KeyDown наступает СНАЧАЛА для формы и ПОТОМ для контроля если Form.KeyPreview = TRUE.
Убедитесь, что вы установили это свойство корректно.

То Mavr:
Способ с SendKeys в каждом контроле для передачи фокуса наиболее НЕУДАЧЕН. Он длинен: сравните количество кода на контроль у Foxtrot и avtoman. Да и ни к чему как то эмулировать переход фокуса. Положено делать напрямую: через SetFocus. Но главное, делать это надо именно в Sub Form_KeyPress, а не в контролях, если их таких больше 2. Вы серьезно хотите повторять код? Как минимум это противоречит сертификационным требованиям Microsoft для VB6.

То lan:
Я согласен с вами абсолютно.




Mavr
04.06.2007, 06:19 15
2VladK, в каждом контроле и не надо ставить обработчик, то же самое KeyPreview = True, и ставишь SendKeys в Form_KeyDown, и фокус сам будет скакать на след. контрол.
0 / 0 / 0
Регистрация: 09.05.2007
Сообщений: 130
05.06.2007, 15:28 16
KeyPreview
(dlja UserForm)

ja v Excele ne naschel ((

Ego tam net? Ili ono ina4e nazyvajetsja?
0
05.06.2007, 15:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2007, 15:28
Помогаю со студенческими работами здесь

Переход к следующему элементу по нажатии Enter вместо Tab
Доброго времени суток. Существует форма с большим количеством текстбоксов и комбобоксов....

Не получается поменять TAB на ENTER
Вставил вот такой код: private void SwitchToNextControl(Control sender) { ...

PostMessage помогите. Нажатие TAB и ENTER
PostMessage(hwnd, WM_KEYDOWN, VK_TAB, 0); Sleep(30); PostMessage(hwnd,...

как можно заменить TAB на Enter?
как можно заменить TAB на Enter, я хочу чтоб при нажатие Enter курсор двигался по полям


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru