Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по TexBox, Tab 
V
    Опции темы
timich
Дата 12.2.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Привет всем! Такой вопрос. На форме расположил 20 текстовых боксов. Как сделать так чтобы во время работы программы для перехода от одного текстбокса к следующему не нужно было ничего нажимать, то есть не нужно нажимать Tab , а просто после ввода двузначного числа активным становился следующий тексбокс. 
PM MAIL   Вверх
Pilger
Дата 12.2.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



В обработчике события изменения текста в текстовом поле (TextChanged) добавляешь проверку на текст (длину или прочее) и даешь фокус другому текстовому полю (TextBox.Focus). Если их много, то можно их засунуть в Array и привязать одно событие.

Это сообщение отредактировал(а) Pilger - 12.2.2009, 15:44


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
timich
Дата 12.2.2009, 23:50 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Если можно, на примере. Как должен выглядеть код, в какой части лучше его расположить.
PM MAIL   Вверх
Pilger
Дата 13.2.2009, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Ну я ж говорю... ну вот простенький пример для одного текстового поля
Код

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        'Значение TextBox1 изменилось

        If TextBox1.Text.Length > 1 Then    'если длина текста больше 1
            TextBox2.Focus()                'то передаем фокус на TextBox2
        End If
    End Sub


Это сообщение отредактировал(а) Pilger - 13.2.2009, 01:39


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
timich
Дата 13.2.2009, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Во класс)) Я новичок просто)
Осваиваю
Спасибо!
А как будет для двадцати текстбоксов?
Ну я понимаю, что можно для каждого бокса прописать также))), а как можно короче?

Это сообщение отредактировал(а) timich - 13.2.2009, 03:50
PM MAIL   Вверх
Pilger
Дата 13.2.2009, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Примерно так же, как вот и тут есть...
http://forum.vingrad.ru/forum/topic-222125.html

Подробнее пока написать времени нет, т.к. я сейчас уеду и приеду через пару дней. Если не разберешься, потом помогу.


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
diadiavova
Дата 14.2.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



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

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TBTab.rar 55,56 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
diadiavova
Дата 14.2.2009, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Да, ещё: Иф там проверяет, что введены действительно две цифры, кроме того, я ограничил максимальную длину текста двумя символами.

Это сообщение отредактировал(а) diadiavova - 14.2.2009, 12:12


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
timich
Дата 14.2.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



diadiavova, нет слов))
как всегда исчерпывающий ответ.
большое спасибо!
PM MAIL   Вверх
timich
Дата 21.2.2009, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Подскажите пожалуйста что в этом коде не верно((

Код

Public Class Form1
    Dim МасПоле() As TextBox = {Nothing, Поле1, Поле2, Поле3, Поле4, Поле5, Поле6, Поле7, Поле8, Поле9, _
                                   Поле10, Поле11, Поле12, Поле13, Поле14, Поле15, Поле16, Поле17, Поле18, _
                                   Поле19, Поле20, Поле21, Поле22, Поле23, Поле24, Поле25, Поле26, Поле27, _
                                   Поле28}
 Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Поле1.TextChanged, Поле2.TextChanged, Поле3.TextChanged, Поле4.TextChanged, Поле5.TextChanged, Поле6.TextChanged, Поле7.TextChanged, Поле8.TextChanged, Поле9.TextChanged, Поле10.TextChanged, Поле11.TextChanged, Поле12.TextChanged, Поле13.TextChanged, Поле14.TextChanged, Поле15.TextChanged, Поле16.TextChanged, Поле17.TextChanged, Поле18.TextChanged, Поле19.TextChanged, Поле20.TextChanged, Поле21.TextChanged, Поле22.TextChanged, Поле23.TextChanged, Поле24.TextChanged, Поле25.TextChanged, Поле26.TextChanged, Поле27.TextChanged, Поле28.TextChanged
        For i As Integer = 1 To 20
            If МасПоле(i).Text.Length > 1 Then
                For j As Integer = 1 To 20
                    If МасПоле(j).Enabled = True Then
                        МасПоле(j).Focus()
                    End If
                Next
            End If
        Next
 End Sub
End Class


Это сообщение отредактировал(а) timich - 21.2.2009, 03:43
PM MAIL   Вверх
diadiavova
Дата 21.2.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



А то, что текстбоксов 28 а цикл обходит только 20...это так и было задумано?

А не так в коде то, что ты создаёшь вложенный цикл в ситации, когда надо просто проверить второе условие. В этом случае у тебя код всегда, когда есть хотябы один бокс с текстом больше одного символа будет устанавливать фокус на последнем доступном текстбоксе. 

Подробнее можно написать, если опишешь, что твой код должен делать(если конечно ворпос не адресован телепатам  smile ). 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
timich
Дата 21.2.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Цитата

Подробнее можно написать, если опишешь, что твой код должен делать(если конечно ворпос не адресован телепатам  smile ). 

 smile 

Есть массив из 28 текстбоксов. Все они должны принимать двузначное число и переводить фокус на следующий.
Некоторые из первых двадцати, во время работы программы, могут быть неактивны (Enabled = False) и при передачи фокуса их нужно перепрыгивать.
В программе перед вводом чисел будет нажиматься кнопка СБРОС. Я написал код для кнопки СБРОС в котором задаются неактивные текстовые поля(каждый раз разные), там же напишу операторы которые будут устанавливать фокус на первый активный тексбокс из первых двадцати. 
Массив я использовал для удобства. И для дальнейшей обработки введенных чисел программой. Хотя может массив и не обязателен...


ФФФух! Вроде бы все описал  smile  smile 


PM MAIL   Вверх
diadiavova
Дата 21.2.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Попробуй так.
Код

Public Class Form1
    Dim МасПоле() As TextBox = {Nothing, Поле1, Поле2, Поле3, Поле4, Поле5, Поле6, Поле7, Поле8, Поле9, _
                                   Поле10, Поле11, Поле12, Поле13, Поле14, Поле15, Поле16, Поле17, Поле18, _
                                   Поле19, Поле20, Поле21, Поле22, Поле23, Поле24, Поле25, Поле26, Поле27, _
                                   Поле28}
 Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Поле1.TextChanged, Поле2.TextChanged, Поле3.TextChanged, Поле4.TextChanged, Поле5.TextChanged,  _
 Поле6.TextChanged, Поле7.TextChanged, Поле8.TextChanged, Поле9.TextChanged, Поле10.TextChanged, _ 
Поле11.TextChanged, Поле12.TextChanged, Поле13.TextChanged, Поле14.TextChanged, Поле15.TextChanged, _
 Поле16.TextChanged, Поле17.TextChanged, Поле18.TextChanged, Поле19.TextChanged, Поле20.TextChanged, _ 
Поле21.TextChanged, Поле22.TextChanged, Поле23.TextChanged, Поле24.TextChanged, Поле25.TextChanged, _ 
Поле26.TextChanged, Поле27.TextChanged
     Dim sr As TextBox = CType( sender, TextBox)
     Dim counter As Integer = Array.IndexOf(МасПоле, sr)
     While(counter<27)
         counter += 1
         If МасПоле(counter).Enabled Then
               МасПоле(counter).Focus()
               End Sub
         End If

     End While
       
 End Sub
End Class


Проверь в работе( мог ошибиться).

Это сообщение отредактировал(а) diadiavova - 21.2.2009, 17:44


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
timich
Дата 21.2.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Когда стартую программу выскакивает окно InvalidOperationException was unhandled 
и сообщает 
An error occurred creating the form. See Exception.InnerException for details.  The error is: Object reference not set to an instance of an object.
То же самое было и с моим кодом(( Что это такое?? 
Запустил по шагово, это сообщение выскакивает на операторе  If МасПоле(counter).Enabled Then

PM MAIL   Вверх
diadiavova
Дата 21.2.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



А у тебя все текстбоксы инициированы? Такое обычно бывает, когда обращаешься к пустой переменной. 
И ещё: а чем тебе не подошёл тот вариант, который я выложил вначеле?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.