Переход курсора после нажатия Enter

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

Переход курсора после нажатия Enter

Сообщение Андрей260276 » 23.08.2006 (Ср) 13:16

Подскажите, что не так... Хочу сделать в своей программке переход из одного текттового поля к компоненту DTPicker1,после нажатия Enter, тоесть ввёл цифру в Text1,нажал Enter,ввёл число в DTPicker1,нажал Enter,фокус перешёл к кнопке нажал Enter нажалась кнопка. Вроде подробно описал.
Я пробую так :
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then ' пользователь нажал <Enter>
' курсор в следующее поле ввода
If Index < 4 Then Text(Index + 1).SetFocus
End If
End Sub
Но не работает. Помогите парни решить проблемку...

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

Сообщение Viper » 23.08.2006 (Ср) 14:27

а вот интересно откуда у теяб Index берется?
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.08.2006 (Ср) 14:33

Нажатия лови на форме (KeyPreview = True), иначе придется в каждом контроле обрабатывать

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Переход курсора после нажатия Enter

Сообщение Andrey Fedorov » 23.08.2006 (Ср) 14:38

Андрей260276 писал(а):Подскажите, что не так...


Не так - это то что ты пытаешься следовать стилю DOS.

В Windows по Enter-у должен осуществляться ввод/сохранение всех полей на форме, а для перехода между полями есть клавиша Tab.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Re: Переход курсора после нажатия Enter

Сообщение alibek » 23.08.2006 (Ср) 14:41

Andrey Fedorov писал(а):Не так - это то что ты пытаешься следовать стилю DOS.

Не надо клеветы :)
Это не стиль DOS, это стиль FoxPro и Clipper.
Если не учитывать эти гадости, а также некоторые банковские и финансовые самоделки, то Tab для перехода по полям использовалось чаще.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Переход курсора после нажатия Enter

Сообщение Andrey Fedorov » 23.08.2006 (Ср) 14:46

alibek писал(а):
Andrey Fedorov писал(а):Не так - это то что ты пытаешься следовать стилю DOS.

Не надо клеветы :)
Это не стиль DOS, это стиль FoxPro и Clipper.


Ну могет быть - в DOS я в основном с FoxPro и работал ;)
В общем, оттуда ноги растут.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Андрей260276
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 21.07.2006 (Пт) 8:16
Откуда: Рязань

Сообщение Андрей260276 » 23.08.2006 (Ср) 16:07

Nicky писал(а):Нажатия лови на форме (KeyPreview = True), иначе придется в каждом контроле обрабатывать


Подскажите если не трудно,как это сделать... Желательно пример если есть.


Я вот тут пробую : Select Case KeyAscii
Case 13 ' клавиша <Enter>
Text2.SetFocus

Case Else
KeyAscii = 0
End Select

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2006 (Ср) 16:49

гиблое это дело: делать переход между контролами по ENTER, поверь
будет куча у тебя проблем, имхо 8)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2006 (Ср) 16:52

Konst_One писал(а):гиблое это дело: делать переход между контролами по ENTER, поверь
будет куча у тебя проблем, имхо 8)


Угу.
И отвыкать надо от дурных привычек, в любом случае.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Сообщение alibek » 23.08.2006 (Ср) 16:59

Ну поставь KeyPreview = True и в коде формы напиши:
Код: Выделить всё
Private Sub Form_KeyPress(KeyAscii As Integer)
  If KeyAscii = vbKeyReturn Then
    KeyAscii = 0
    SendKeys "{TAB}", True
  End If
End Sub


Но лучше послушай более опытных товарищей и забей на этот автопереход по Enter.
Lasciate ogni speranza, voi ch'entrate.

S397
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 02.12.2005 (Пт) 13:31

Сообщение S397 » 23.08.2006 (Ср) 17:04

Используй KeyDown вместо KeyPress и будет тебе счастье.

Относительно использования клавиши Enter для перехода между полями, скажу, что в системах массового ввода информации быстрее поступать именно так. Не верите, возьмите двух операторов и секундомер и замерьте, что быстрее вводить инфу только используя алфавитно-цифровую клавиатуру и Enter или TAB, а потом спросите у них еще как удобней. А потом откройте Excel введите текст в ячейку нажмите Enter и посмотрите, куда делся курсор.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 23.08.2006 (Ср) 17:06

и при чем тут Excel :?: :shock:

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

Сообщение alibek » 23.08.2006 (Ср) 18:30

S397 писал(а):Не верите, возьмите двух операторов и секундомер и замерьте, что быстрее вводить инфу только используя алфавитно-цифровую клавиатуру и Enter или TAB, а потом спросите у них еще как удобней.

Посади рядом с ними третьего оператора, который будет вводить информацию не вручную, а штрих-сканером или обычным сканером, и спроси у него, как удобней.
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.08.2006 (Ср) 20:53

alibek писал(а):Посади рядом с ними третьего оператора, который будет вводить информацию не вручную, а штрих-сканером или обычным сканером, и спроси у него, как удобней.

Да не, смысл есть. К примеру, сидит оператор целый день набивает цифры (суммы, номера договоров и т.д.). И вполне логично, что делает он это на цифровой клавиатуре и переходит по Enter'у там же

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

Сообщение alibek » 23.08.2006 (Ср) 22:30

Nicky писал(а):К примеру, сидит оператор целый день набивает цифры (суммы, номера договоров и т.д.). И вполне логично, что делает он это на цифровой клавиатуре и переходит по Enter'у там же

На дворе 2006 год.
Какой смысл большую кучу однообразных данных вручную, когда это можно автоматизировать?
А на случай ручного ввода небольшого количества данных скорость ввода данных особого рояля не играет.
Lasciate ogni speranza, voi ch'entrate.

S397
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 02.12.2005 (Пт) 13:31

Сообщение S397 » 24.08.2006 (Чт) 9:03

Какой смысл большую кучу однообразных данных вручную, когда это можно автоматизировать?

Наверняка можно. Но я например не способен в рамках разумного бюджета решить такую задачу: Ввод в течении часа 10 тыс бюллетений для голосования, окончательная форма которых и вопросы заданные в них, утверждаются на этом же собрании в предыдущем вопросе. А акционеры ставят каракулями % от приндлежащего им количества акций, и в праве, например, на суде потребовать с Правления данные о том, как они голосовали. Погрешность допускаемая всеми системами распознавания рукописного текста (и ижие с ними системами распознавания речи) в данном случае неприемлема.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2006 (Чт) 11:38

В общем, S397 прав. Далеко не все можно автоматизировать, а цифровая клавиатура с Enter'ом для ввода цифр куда более удобна, чем обычная с TAB'ом.
Быть... или не быть. Вот. В чём вопрос?

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

Сообщение alibek » 24.08.2006 (Чт) 11:50

Вот потому матричные принтеры практически нигде, кроме банков, и не используются :) (я знаю, почему там матричные принтеры используются)
Надо не программы адаптировать к старым методам, надо методы и людей адаптировать к новым технологиям.
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.08.2006 (Чт) 11:59

не порите чушь, товарищи 8)
я пишу банковский софт: нет там никакого перехода по ENTER, только по TAB

а переучивать персонал надо, тут никуда не денешься - прогресс видите ли...

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

Сообщение alibek » 24.08.2006 (Чт) 12:00

Konst_One писал(а):я пишу банковский софт: нет там никакого перехода по ENTER, только по TAB

Не то, чтобы я с тобой спорил, но...
Далеко не ты один пишешь банковский софт :)
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 24.08.2006 (Чт) 12:10

Как раз в банке у меня одна единственная программа имеет интерфейс "под ДОС" и в ней переход можно делать и по Enter, и по TAB :)

А вот когда я в бытность студентом зарабатывал, забивая в Экселе информацию с титульных листов олимпиадных работ... :D
Быть... или не быть. Вот. В чём вопрос?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 24.08.2006 (Чт) 12:11

я ,все же, сторонник TAB, имхо удобней

blinow
Обычный пользователь
Обычный пользователь
 
Сообщения: 53
Зарегистрирован: 27.06.2005 (Пн) 3:13

Сообщение blinow » 25.08.2006 (Пт) 4:19

alibek писал(а):Вот потому матричные принтеры практически нигде, кроме банков, и не используются :) (я знаю, почему там матричные принтеры используются)
Надо не программы адаптировать к старым методам, надо методы и людей адаптировать к новым технологиям.

Ну ребята, ну молодцы, оказывается не компьютер для человека, а человек для компьютера. Это повидимому Вы и придумали при оплате в Сбербанке писать на бумажонке длиннущие коды вида платежа и старушка матерясь пытается оплатить рублевую госпошлину выписывая 20, 30 цифр какой-то абракадабры и тут-же появились ушлые рябята предлагающие за 10р заполнить бумажонку или же сам банк с невинной рожей предлагает тоже самое. Наверно было проще написать "Госпошлина" и все, а оператор там, сам или программно ставит какие хошь коды.

Цифровая клавиатура, для того и предназначена, чтоб быстро вводить цифры. Посмотрите Excel, Access я что-то не заметил там особого напряга по переходу по Enter, а вам лень написать немного кода, ну-ну.
При древних ЭВМ были техники и программисты, и всегда ругались, кто главней. Но ни кому в голову не приходило, что главней пользователь, он в конечном итоге деньги вам дает, а вы существуете лишь для него и не для чего больше.

Вот один из вариантов использования перехода по Enter
Код: Выделить всё
Private Sub txtField_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
    Case 13
        If txtField(Index).Text = "" Then
            KeyCode = 0
            SendKeys "{TAB}"
        Else
            If txtField(Index).SelStart = 0 And txtField(Index).SelLength = Len(txtField(Index).Text) Then
                KeyCode = 0
                SendKeys "{TAB}"
            ElseIf txtField(Index).SelStart = Len(txtField(Index).Text) Then
                KeyCode = 0
                SendKeys "{TAB}"
            Else
                txtField(Index).SelStart = 0
                txtField(Index).SelLength = Len(txtField(Index).Text)
            End If
        End If
....

И используй не на форме, а на контроле и в каждом виде контрола, муторно, зато пользователю удобно и кстати тебе дополнительная возможность, что-либо проконтролировать.
Тоже и для других клавиш перехода, да и можно использовать процедурку для этих целей.

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Re: Переход курсора после нажатия Enter

Сообщение lister » 25.08.2006 (Пт) 4:50

Andrey Fedorov писал(а):В Windows по Enter-у должен осуществляться ввод/сохранение всех полей на форме, а для перехода между полями есть клавиша Tab.


Ну почему уж сразу "должен"... Что есть такой закон? ;)

Да, использовать Enter для навигации по полям это некий моветон. Таб в этом деле используется чаще.

Но друзья мои, не будем забывать о конечном пользователе. Если ему по душе "гулять по полям" при помощи Enter, пусть пользуется на здоровье. Это и есть дружественный интерфейс. И еще желательно добавить быструю навигацию по полям. И BackColor полей в фокусе менять неплохо бы, если оных много.

Ну а кто любит перемещаться табом, а закрывать окна энтером и эскейпом - тот снимет галку в настройках программы у чекбокса со словами "Использовать клавишу Enter для навигации".


blinow
Во всем с тобой согласен, за исключением места использования перехода по Enter.
Нажатия проще ловить на форме.
Последний раз редактировалось lister 25.08.2006 (Пт) 5:05, всего редактировалось 2 раз(а).

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

Сообщение alibek » 25.08.2006 (Пт) 8:26

blinow писал(а):Это повидимому Вы и придумали при оплате в Сбербанке писать на бумажонке длиннущие коды вида платежа и старушка матерясь пытается оплатить рублевую госпошлину выписывая 20, 30 цифр какой-то абракадабры и тут-же появились ушлые рябята предлагающие за 10р заполнить бумажонку или же сам банк с невинной рожей предлагает тоже самое. Наверно было проще написать "Госпошлина" и все, а оператор там, сам или программно ставит какие хошь коды.

Как только ты мне объяснишь, зачем печатать платежку, затем вручную ее заполнять, чтобы вручную вбивать ее в компьютер, я тут же обдумаю твою идею. Но пока я смысла в ней не вижу.
Это тоже самое, что сделать автомобиль, в котором водитель не имеет обзора, потому что окна находятся на полметра выше его головы.
Можно конечно от нечего делать изобретать систему зеркал, которая будет передавать ему изображение снаружи. Оптимизировать ее, подстравивать, чтобы бедному водителю не приходилось слишком много крутить головой.
А можно выкинуть нафиг всю эту систему зеркал и поставить цифровой дисплей, прямо у него перед глазами.
Ну или если до дисплеев не доросли, то выкинуть идею, и проектировать автомобиль так, чтобы окна находились на уровне головы водителя.
Lasciate ogni speranza, voi ch'entrate.

blinow
Обычный пользователь
Обычный пользователь
 
Сообщения: 53
Зарегистрирован: 27.06.2005 (Пн) 3:13

Сообщение blinow » 26.08.2006 (Сб) 3:26

Позволю, не согласиться, банки сперва радостно набросились на идею не черта не печатать, мы сами так наклепали, но вдруг выяснилось, что клиент легко отказывается от своих действий и у банка нет никаких принимаемых судом документов, пришлось ввести подпись, но этого всетаки маловато, пришлось добавить царапание ручкой ФИО и адреса. Но, мало, пришлось установить камеры наблюдения и т.д. и т.п. до бесконечности :evil:
Про отлавливание на форме, конечно проще, но если форма тяжеленная и завалена разнотипными контролами, гридами и прочей дрянью :(

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 26.08.2006 (Сб) 3:42

Про отлавливание на форме, конечно проще, но если форма тяжеленная и завалена разнотипными контролами, гридами и прочей дрянью


В этом случае оператор TypeOf поможет

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 26.08.2006 (Сб) 12:22

Ну, раз надо Enter, пускай Enter... хоть даже я и за Tab.

ЗЫ. огромное сорри за оффтоп.
Однако же... прям холивар новый... можно тему переносить
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)


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

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

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

    TopList