Как избавиться от лишнего кода?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Как избавиться от лишнего кода?

Сообщение Лохматый » 15.07.2005 (Пт) 23:46

Как избавится от лишнего кода, если у меня 50 элементов textbox и каждый нужно опросить?
Такой код:
Dim a(49) as string
a(0) = Textbox1.Text
a(1) = Textbox2.Text
a(2) = Textbox3.Text
....
a(49) = Textbox50.Text

Какой-то есть подход?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.07.2005 (Сб) 3:46

Если текстбоксов столько, то значит пора менять дизайн :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 17.07.2005 (Вс) 0:46

Это программа анализа эксперемертальных данных. Как ещё можно опросить пользователя? Нужно 50 текстовых полей.
Часто встречается, что с одним и тем же типом элементов, например label, нужно сделать что-либо и чтобы не перечислять как показано выше, что можно сделать?[/syntax]

Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Сообщение Shurrik » 17.07.2005 (Вс) 7:33

1 вариант - перебор всех контролов:
Dim tb As Control
For Each tb In Me.Controls ' перебираем все контролы
MsgBox(tb.Name, MsgBoxStyle.Critical)
If tb.Name.Length > 7 Then
If tb.Name.Substring(0, 7) = "TextBox" Then
Dim n% = tb.Name.Substring(7) ' узнаем номер
a(n) = tb.Text
End If
End If
Next
2 вариант - через DataSet:
Создай на форме DataSet, в нем таблицу, в таблице поля, привяжи свои TextBox к этим полям. Массив полей и есть твой массив А()
Колесо: Хочешь жить? Умей вертеться.

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 17.07.2005 (Вс) 19:13

1-й вариант не работает.
в строчке
Код: Выделить всё
a(n) = tb.Text

Возникает ошибка.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 18.07.2005 (Пн) 16:01

А текстБоксы в массив загнать не судьба?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 04.08.2005 (Чт) 0:36

Sebas писал(а):А текстБоксы в массив загнать не судьба?

А как?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.08.2005 (Чт) 0:39

Dim d(50) as textbox

for i=0 to 50
d(i)=new textbox
me.controls.add(d(i))
'выставить свойства d(i) и если нужно события
next
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 04.08.2005 (Чт) 0:43

а если элементы уже добавленны в форму, зачем их добавлять ещё раз?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.08.2005 (Чт) 0:45

Лохматый писал(а):а если элементы уже добавленны в форму, зачем их добавлять ещё раз?


э..? чёрт, даже не знаю чё сказать. Сильно сказано...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 04.08.2005 (Чт) 0:49

может я глупость написал, тогда подскажите...

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.08.2005 (Чт) 1:17

ну убери их
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 04.08.2005 (Чт) 1:35

все textbox'ы расставлены в нужных местах формы, а при выполнении кода, появляется в углу один элемент textbox, или 50 в одном месте.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.08.2005 (Чт) 1:37

добавляй в TablePanel если не можешь зависимость от i создать
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 04.08.2005 (Чт) 11:14

Вообще-то надо делать массив. Но если уж так приперло, то перебирай в цикле так:

Код: Выделить всё
        Dim a(50) As String
        Dim c() As Control
        Dim i As Integer
        Dim t As TextBox

        For i = 0 To i = 50
            c = Me.Controls.Find("Textbox" + i.ToString(), True)
            If c.Length = 0 Then
                a(i) = "0"
            Else
                t = CType(c(0), TextBox)
                a(i) = t.Text
            End If
        Next
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 04.08.2005 (Чт) 13:57

Ответы себаса рулят..порадовало..но ркально челу ты так и не помог :)

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 05.08.2005 (Пт) 15:18

gaidar писал(а):Вообще-то надо делать массив. Но если уж так приперло, то перебирай в цикле так:

Код: Выделить всё
        Dim a(50) As String
        Dim c() As Control
        Dim i As Integer
        Dim t As TextBox

        For i = 0 To i = 50
            c = Me.Controls.Find("Textbox" + i.ToString(), True)
            If c.Length = 0 Then
                a(i) = "0"
            Else
                t = CType(c(0), TextBox)
                a(i) = t.Text
            End If
        Next


для проверки массива пишу ниже :
Код: Выделить всё
For i = 1 To 50
            MessageBox.Show(a(i))
        Next i

массив пустой.

Меня не приперло мне нужен любой метод, просто подробней описать, что делать. Я ведь только учусь...

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 05.08.2005 (Пт) 15:35

Может существует другой элемент с помошью которого можно на форме сделать большую таблицу и потом все данные записать в массив?
Если да, то как это сделать?

vrodo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 109
Зарегистрирован: 09.10.2003 (Чт) 18:45
Откуда: Дубна МО, Москва

Сообщение vrodo » 09.08.2005 (Вт) 14:50

МДаааааааа
А про понятие DataSet из вас ктонибудь слышал ?
в DataSet добавляем табличку с необходимым количеством полей и в текстовых полях делаем привязку
Плюс получам дополнительную фичу просмотр последних результатов да и вообще историю результатов эксперимента если добавить сохранение в базу данных или в XML
Чтобы понять свои ошибки их достаточно написать (c)
Интернет большой, ему видней
С наилучшими Пожеланиями и Всех Благ :D

Лохматый
Обычный пользователь
Обычный пользователь
 
Сообщения: 79
Зарегистрирован: 19.06.2005 (Вс) 16:36
Откуда: Краснодар

Сообщение Лохматый » 13.08.2005 (Сб) 12:21

Sebas писал(а):добавляй в TablePanel если не можешь зависимость от i создать

Добавил... А как теперь в массив загнать?


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList