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

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

08.08.2011, 12:03. Просмотров 515. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

5
gitarillo
728 / 528 / 45
Регистрация: 17.06.2010
Сообщений: 1,027
Записей в блоге: 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
728 / 528 / 45
Регистрация: 17.06.2010
Сообщений: 1,027
Записей в блоге: 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
_
2351 / 1224 / 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

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

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

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


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

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

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