Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
qtronix
26 / 1 / 1
Регистрация: 02.08.2011
Сообщений: 6
#1

Написание однотипного кода в событии многих текстбоксов, использующего их имена - Visual Basic .NET

08.08.2011, 12:03. Просмотров 498. Ответов 5
Метки нет (Все метки)

Доброго времени суток уважаемые.
наткнулся с на некую проблемку и не знаю как решить.
И даже ума не хватате как поисковый запрос составить толковый чтобы вас по пустякам лишний раз не отвлекать.
Суть проблемы в следующем
есть некая форма в которую мы получаем данные с сервера
и есть некая подпрограмма которая отвечает за обработку событий в TextBoxe
vb.net
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
29
30
31
    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        EanCode = ""
        LmCode = ""
        Dim CodeLen As Int16
        If e.KeyCode = Keys.Enter Then
            CodeLen = Len(TextBox1.Text)
            If CodeLen = 8 Then
                EanCode = "null"
                LmCode = TextBox1.Text
                TextBox3.Enabled = True
                TextBox3.Text = "1"
            ElseIf CodeLen = 13 Then
                EanCode = TextBox1.Text
                LmCode = "null"
                TextBox3.Enabled = True
                TextBox3.Text = "1"
            Else : MsgBox("Вы ввели неверные данные")
                TextBox1.Clear()
                Exit Sub
            End If
            CardsDate()
            If ProdName = "" Then
                MsgBox("Данные на сервере Не найдены!! Проверьте введенные данные ")
                Exit Sub
            End If
            TextBox2.Text = ProdName
            TextBox4.Text = ProdPriceStd
            TextBox5.Enabled = True
            TextBox5.Focus()
        End If
    End Sub
и таких должно быть 15 штук
на 1,5,9,13,17,21,25,19,33,37,41,45,49,53,57 TextBox'ах

можно ли каким либо образом сделать так чтоб мне не копипастить этот безумный код 15 раз да еще и в каждом делать правки, С таким количеством правок я точно гденить чтонить забуду поправить и соответсвенно будут глюки которые будет проблематично выискать.
Всем заранее ОГРОМНОЕ спасибо за помощь!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2011, 12:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написание однотипного кода в событии многих текстбоксов, использующего их имена (Visual Basic .NET):

Как фрагменты однотипного кода поместить в один обработчик
Здравствуйте! Вот взвалил на свои плечи непосильную ношу. Долго отнекивался и...

Объяснить работу кода, использующего полиморфизм
Ребятки вот подскажите, есть такая конструкция class Transport { public...

Непонятное поведение кода, использующего AJAX
Доброго времени суток! Решил написать элементарный пример использования...

Одновременная прокрутка двух текстбоксов(ритч текстбоксов)
Вообщем есть RichTextBox1 хочу что-бы когда прокручиваю его синхронно...

Двойное срабатывание кода при перезагрузке приложения в событии закрытия формы
private void activity_FormClosing(object sender, FormClosingEventArgs e) ...

Написание DPI скрипта Juniper SRX240h для блокировки сайтов (IP адреса, имена)
Есть список запрещенных сайтов, более 24 000 Задача блокировать эти сайты Я...

5
gitarillo
727 / 527 / 45
Регистрация: 17.06.2010
Сообщений: 1,026
Записей в блоге: 1
08.08.2011, 13:22 #2
qtronix, создай одну процедуру, и в нее добавь обработчики со всех нужных тестбоксов.
vb.net
1
2
3
Private Sub MainSubKeyDown(BYVAL sender AS Object, BYVAL e AS SYSTEM.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown, TextBox3.KeyDown.....
.............
End Sub
Вместо TextBox1 в теле процедуры используй sender
1
qtronix
26 / 1 / 1
Регистрация: 02.08.2011
Сообщений: 6
08.08.2011, 17:18  [ТС] #3
спасибо за совет приму на будущее
но есть одна маааленькая засада
текстбоксы в нутри процедуры тоже меняются
с каждым новым на +4
мне тут подсказали что можно както через массив текстбоксов это реализовать
но я неразу такого неделал еще
щас буду пробовать рыть в сторону массива тесктбоксов

Добавлено через 31 минуту
с массивом заморачиваться неохота
нашел что можно обратится
вот таким образом
vb.net
1
Me.Controls("TextBox" & INDEX).Text = "Это поле № " & INDEX
ну при условии что все элементы однотипны

теперь буду пробовать ваш совет

Добавлено через 2 часа 17 минут
а не подскажете ли еще
как в этой процедуре
vb.net
1
2
3
Private Sub MainSubKeyDown(BYVAL sender AS Object, BYVAL e AS SYSTEM.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown, TextBox3.KeyDown.....
.............
End Sub
понять с какого TextBox'а прилетел sender ?
ну тоесть мне надо чтобы было чтото вроде

vb.net
1
2
3
4
5
aaa = sender.ToString
..........
или
.........
        aaa = sender.GetType.Name
но оба метода дают не то что хотелось бы
вторым способом я получаю что sender - textbox но какой именно непонятно
существует-ли способ узнать с какого именно TextBoxa (TextBox1, TextBox2, etc) Был получен sender
0
gitarillo
727 / 527 / 45
Регистрация: 17.06.2010
Сообщений: 1,026
Записей в блоге: 1
08.08.2011, 17:41 #4
vb.net
1
2
3
Private Sub MainSubKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown, TextBox2.KeyDown
        MsgBox(sender.name)
    End Sub
Подойдет?
1
qtronix
26 / 1 / 1
Регистрация: 02.08.2011
Сообщений: 6
08.08.2011, 18:27  [ТС] #5
Цитата Сообщение от gitarillo Посмотреть сообщение
Подойдет?
Спасибо огромное !
От жеш Блин !!
Оказывается проще чем я думал
я через чур глубоко полез
спасибо огромнейшее !!!!

Добавлено через 25 минут
в общем все заработало !!
Ура !! И еще раз спасибо
Сделал через
Select Case
может и не очень красиво зато понятно и работает

если кому интересно (мож пригодится)
вот код

vb.net
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Private Sub TxtBoxKDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown, TextBox5.KeyDown, TextBox9.KeyDown, TextBox13.KeyDown, TextBox17.KeyDown, TextBox21.KeyDown, TextBox25.KeyDown, TextBox29.KeyDown, TextBox33.KeyDown, TextBox37.KeyDown, TextBox41.KeyDown, TextBox45.KeyDown, TextBox49.KeyDown, TextBox53.KeyDown, TextBox57.KeyDown
        If e.KeyCode = Keys.Enter Then
            Dim index As Int16
            Select Case sender.name
                Case TextBox1.Name
                    index = 1
                Case TextBox5.Name
                    index = 5
                Case TextBox9.Name
                    index = 9
                Case TextBox13.Name
                    index = 13
                Case TextBox17.Name
                    index = 17
                Case TextBox21.Name
                    index = 21
                Case TextBox25.Name
                    index = 25
                Case TextBox29.Name
                    index = 29
                Case TextBox33.Name
                    index = 33
                Case TextBox37.Name
                    index = 37
                Case TextBox41.Name
                    index = 41
                Case TextBox45.Name
                    index = 45
                Case TextBox49.Name
                    index = 49
                Case TextBox53.Name
                    index = 53
                Case TextBox57.Name
                    index = 57
 
            End Select
 
            Dim CodeLen As Int16
            EanCode = ""
            LmCode = ""
            CodeLen = Len(sender.Text)
            If CodeLen = 8 Then
                EanCode = "null"
                LmCode = sender.Text
                Me.Controls("TextBox" & index + 2).Enabled = True '3
                Me.Controls("TextBox" & index + 2).Text = "1" '3
            ElseIf CodeLen = 13 Then
                EanCode = sender.Text
                LmCode = "null"
                Me.Controls("TextBox" & index + 2).Enabled = True '3
                Me.Controls("TextBox" & index + 2).Text = "1" '3
            Else : MsgBox("Вы ввели неверные данные")
                sender.Clear()
                Exit Sub
            End If
            CardsDate()
            If ProdName = "" Then
                MsgBox("Данные на сервере Не найдены!! Проверьте введенные данные ")
                Exit Sub
            End If
            Me.Controls("TextBox" & index + 1).Text = ProdName '2
            Me.Controls("TextBox" & index + 3).Text = ProdPriceStd '4
            Me.Controls("TextBox" & index + 4).Enabled = True '5
            If sender.name <> "TextBox57" Then
                Me.Controls("TextBox" & index + 4).Focus() '5
            End If
        End If
    End Sub
0
Eugene22
_
2349 / 1222 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
08.08.2011, 19:14 #6
qtronix, мне вот интересно, а на форме всего 15 текстовых полей или 57? А то Select Case выглядит уж слишком не оптимально.
0
08.08.2011, 19:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 19:14
Привет! Вот еще темы с решениями:

Ускорение загрузки однотипного текста
Есть ли способ быстро загрузить однотипный текст? # Не нужная строчка 1 #...

Как добавить много однотипного товара
Здравствуйте! Столкнулась с задачей быстрого добавления однотипного товара. ...

Обращение к свойствам однотипного кликнутого объекта
Привет, прошу помочь разобраться с назревшим вопросом. var arr = new...

Написание кода
Здравствуйте у меня такая проблема. Я пробую написать программу на Java суть...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru