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

Textbox при нажатии на Key Tab теряет фокус

15.01.2011, 18:40. Показов 4487. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня проблема:уже давно не могу при печати в окне Textbox использовать клавишу Key Tab.
Спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2011, 18:40
Ответы с готовыми решениями:

TextBox теряет фокус переданный ему по событию AfterSelect компонента TreeView
Доброго дня всем, В обработчике события AfterSelect компонента TreeView есть код textBox1.Focus(), но при выделении элемента в...

Окно теряет фокус при загрузке
при запуске основновного окна - запускаю окно проверки пароля //Activate password form and ckeck pass ...

Перемещение по нужным TextBox по нажатии Tab
У меня на форме много ТестБоксов, ЧекБоксов и всего остального. Нужно при нажатии на Tab в TextBox1 переместиться в TextBox3. Как такое...

27
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
16.01.2011, 18:24
OpeID,

1. Start new project
2. Put 2 text boxes on new form
3. In design mode, set Text1.MultiLine to True
4. In code:

Visual Basic
1
2
3
4
Private Sub Form_Load()
    Text1.TabStop = True
    Text2.TabStop = False
End Sub
5. Run and try Text1.

vlad
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
17.01.2011, 00:13
2VladConn: что за бред??? а если у нас на форме сотня контролов, то что, всем TabStop отрубать??? А перемещаться мышкой чтоль?

Самый простой правильный ответ:
Visual Basic
1
2
3
Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 9 Then KeyAscii = 0: Text1.SelText = Chr(9)
End Sub
Ну и можно сделать усовершенствование - чтобы, к примеру, по Ctrl+Tab переходило в следующему контролу.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
17.01.2011, 03:17
2Alexey Spirin,

Ну что ж, подхватим лексикон. На мой взгляд, ты, Алеша, как раз таки опубликовал бред. Твой код не работает. Работает мой код. Вопрос был как сделать таб элементом редактирования текста, а не средством навигации. И мой пример эту просьбу удовлетворяет. Да, в моем примере отрубать надо табстоп всем остальным контролам - динамически. И восстанавливать - тоже. Не бог весть какая проблема. Неудобно? Создай цикл по всем контролам формы, сунь его в процедуру и вызывай в том боксе, где это нужно.

Я охотно приму на вооружение не только, хм, твою эмоциональность, но и код. Если он будет работать лучще моего. Я, например, не лез в API, не дергал за handles. Посмотри, может получиться.

;0)

Успехов

Влад
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
17.01.2011, 07:39
Здравствуйте, спорщики !!
1. Вы явно это теоретичеки подошли! Для меня неудобно:
Text1.TabStop = True
List1.TabStop = False
т.к. он прыгает через раз то на Text1, то List1 и вставляется Chr(9) в Text1 не вовремя... И как далее пишете, в цикл можно...возможно. Но это уже навороты, еще неизвестно так же чем кончится!!!
2.Во-вторых, как ни странно, но KeyAscii = 9 не отлавливается в событиях Textbox'a:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 9 Then KeyAscii = 0: Text1.SelText = Chr(9)
End Sub
Все другие нажатия клавишь - отлавливается!!! ::))
Только по этому я и обратился к форуму !!!!!!!!!!
3. Та же история с vbKeyTab = это отлавливать нажатие клавиши на клавиатуре!!!
Private Sub Text1_LostFocus()
'List1.TabStop = False = бесполезное занятие::)
If vbKeyTab = 9 Then Text1.SelText = Chr(9) 'все бы отлично
End Sub
'Но после такого отлавливания установить vbKeyTab = 0, програмно невозможно... т.е. она 'висит в памяти' до нажатия любой другой Key
Так что жду дальшее: КАК ОТЛАВЛИВАТЬ нажатие клавиши в событии Text1 без потери фокуса.
И самое интересное, что есть примеры(коды) редакторов, в которых с этим проблем нет, а как там сделано явно, я так и не нашел !!??
Спасибо.
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
17.01.2011, 07:57
2VladConn: И в каком же это месте мой код не работает, а?
Клавиша отлавливается без проблемм. И этот код значительно удобнее, чем включать/выключать табстоп у всех остальных. Пашет на ура.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
17.01.2011, 09:22
Алексей, привет еще раз!
Вот в этом коде НЕ ОТЛАВЛИВАЕИСЯ, и именно нажатие клавиши ТАB !!!!
Visual Basic
1
2
3
4
Private Sub Text1_KeyPress(KeyAscii As Integer)
' перейди в пошаговый режим (F9 на след. строке)и убедись сам!!
    If KeyAscii = 9 Then KeyAscii = 0: Text1.SelText = Chr(9)
End Sub
А на все остальные клавиши при нажатии код реагирует!!!
Алексей - нашел еще:
При Ctrl + Tab - в окне Text1 срабатывает ТАВ, а в событии Text1_KeyPress все же - НЕ срабатывает !!!!!
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
17.01.2011, 09:47
2Дмитри: Перед тем как заслать код сюда, я его у себя проверил. После ообщения о том, что не пашет - проверил еще раз - точно работает.
Единственное, что на это могло повлиять - то, что у меня установлен VS6 Service Pack 6.
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
17.01.2011, 09:58
2VladConn, 2Дмитри: Извините, был не прав. На самом деле, код не работает, когда на форме несколько контролов.
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
17.01.2011, 10:43
Да, у меня было так и в VB5, тепеpь VB6 - тоже самое. Причем, совершенно на разных мшинах и Windows
Ну вопрос не решен и стал уже интересен: прошу помогать решению!
Кто предложит еще.
Спасибо
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
17.01.2011, 10:43
Интересно...
Стал пробовать через Spy++, обнаружил сообщение WM_KEYDOWN.
Но в программе его выловить не могу. Для всех других оно генерируется, а для ТАБа - нет...
0
Comanche
17.01.2011, 12:43
Visual Basic
1
2
3
4
5
6
7
8
Private Declare Function GetAsyncKeyState Lib 'user32' (ByVal vKey As Long) As Integer
'
Private Sub Text1_Validate(Index As Integer, Cancel As Boolean)
    If GetAsyncKeyState(vbKeyTab) Then
        Cancel = True
        Text1(Index).SelText = vbTab
    End If
End Sub
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
17.01.2011, 14:07
Commanhe - убил всех наповал: С П А С И Б О: !!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Declare Function GetAsyncKeyState Lib 'user32' (ByVal vKey As Long) As Integer
 
' вот только маленькое Edit 'по месту'::::)))
Private Sub Text1_Validate(Cancel As Boolean)
'Но у меня VB6 делает имя Sub только так, и все же работает'
   If GetAsyncKeyState(vbKeyTab) Then
      Cancel = True
      Text1.SelText = vbTab 'индекс убрал, т.к. окно у меня Text1.Text
      'это не существенно, но у кого с индексом, то = Text1(Index) 
      'оставить, важно идея правильна и работоспособна!!!!!!!!!!
   End If
End Sub
Хотел тему закрыть, но возник вопрос:
А что еще полезное может делать такая интересная Function GetAsyncKeyState ?
Если можно, конечно, если есть время или где почитать!!!!
Спасибо!!
0
Comanche
17.01.2011, 14:33
Эта функция говорит, нажата ли заданная клавиша в данный момент.

Подробнее - вот здесь:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/getasynckeystate.asp

Обрати внимание на раздел 'Remarks'.
Comanche
17.01.2011, 14:36
Маленькое дополнение: чтобы этот код работал, у твоего текстбокса должо быть CausesValidation = True. Впрочем, это значение по умолчанию у данного свойства.

А 'Index' появился от того, что текстбокс был элементом массива - я бросил на форму Text1(0), Text1(1), Text1(2) и т.д.
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
17.01.2011, 16:23
Vsem privet,

Proshu proscheniya za latinitzu. To, chto pokazal Comanche, ya i imel vvidu. Odno malen'koe 'no':

Vmesto 'vbTab' nuzhno 'vbKeyTab'. Po krainey mere na moem PC.

vlad
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
17.01.2011, 16:26
Vsem privet.

Proshu proscheniya za latinitzu. To, chto pokazal Comanche, ya i imel vvidu v moem poslednem otvete. Odno malen'koe 'no':

Vmesto 'vbTab' nuzhno 'vbKeyTab' - po krainey mere na moem PC.

Vlad
0
Comanche
17.01.2011, 16:47
2VladConn:

Ты пишешь, что

«...вместо 'vbTab' нужно 'vbKeyTab'...»

ЭТО ГДЕ?! В строчке
Code
1
Text1(Index).SelText = vbTab
?!?!

Свойство SelText - Variant (String).
vbTab - это тоже строковая величина, символ табуляции.
А вот vbKeyTab - это ЧИСЛО, ASCII-код, конкретно - девятка.
Если написАть, как ты говоришь:
Code
1
Text1(Index).SelText = vbKeyTab
то вместо символа табуляции ты вставишь в текстбокс КОД этого символа, т.е. цифру 'девять'. Если бы свойство SelText не было таким 'добрым' (т.е. не поддерживало бы Variant data type), то оно даже не дало бы тебе такую строчку выполнить.
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
17.01.2011, 18:24
No imenno tak i rabotaet!
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 139
18.01.2011, 07:09
Привет, вот я задал жару!

Но идея Comanche НЕУКЛОННО ПОБЕЖДАЕТ:
1. Код перехвата нажатия клавиши остался тем же, это неоспоримо!
И что...вместо символа табуляции ты вставишь в текстбокс КОД этого символа в ASCCI , т.е. цифру 'девять' - это проверил. А ее строчное представление Chr(9)

2. Для 2VladConn - что бы вас помирить, вот вам ответ:
Visual Basic
1
2
3
4
5
6
7
Private Sub Text1_Validate(Cancel As Boolean)
   If GetAsyncKeyState(vbKeyTab) Then
      Cancel = True
      Text1.SelText = Chr(vbKeyTab)' Chr(9) 'vbTab
   End If
End Sub
' Прекрасно работает любой вариант
Главное - код перехвата нажатия клавиши: Key Tab, найден.!!
СПАСИБО.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2011, 07:09
Помогаю со студенческими работами здесь

Где задерживается фокус при обходе формы Tab-ом
Мне надо последовательно обойти два текстбокса, две кнопки и вернуться табом опять в верхний текстбокс. Привожу два варианта. В обоих...

Почему при переходе на TAB Label не получает фокус
Несколько вопросов как с помощью клавиши ТАВ переключиться на оюъъект Label(TAB index я поставил нужный мне по порядку, но на LAbel...

Tab Order.(При открытии формы установить фокус на нужный контрол)
Сорри за тупой вопрос. На одной из форм нужно чтобы при открытии курсор стоял в определенном текстбоксе. Поставил этому текстбоксу tab...

Input теряет фокус
Приветствую! Есть слайдер , в input вводится значение и после оно устанавливает значение слайдеру: <input type="text"...

События формы при нажатии Alt+Tab
Разбираюсь с DirectX Разобрался как сделать Полноценный переход из оконного режима в полноэкранный и обратно. Но столкнулся с новой...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru