Показать полную графическую версию : VB 2011 Массивов элементов больше нет?
Раньше писал на ВБ6, а сейчас познаю 2011, и вот обнаружил что теперь нельзя делать массив из элементов. Тоесть нельзя создать кучу текстбоксов с одним именем но разными индексами, но как теперь обрабатывать их в цыклах?
У меня допустим 30 текстбоксов, потом мне надо инфу с них переписать в масив данных
раньше это было типа такого
For a=0 to 29
mass(a)=text(a).text
next
Как теперь осуществляются такие задачи?
Delirium
02-12-2011, 00:39
ArrayList mas = new ArrayList()
Foreach(TextBox tbx in this.Controls)
{
mas.Add(tbx.Text);
}
Ок, спс. Будем пробовать
Хотя, еще не попробовав возникают вопросы.
1Foreach(TextBox tbx in this.Controls) » что здесь означает tbx?
2 В какой последовательности будут обрабатывается текстбоксы
3 Я так понимаю этот код обрабатывает ВСЕ текст боксы на форме, а если мне нужны не все? Это нада помещать их в контейнер или как то так?
что здесь означает tbx? »
Это "переменная содержащая текущий ТекстБокс цикла"...
а если мне нужны не все? »
Можно в цикле "отсеить", используя какой - либо "фильтр". Например, каждому текстбоксу в свойство Tag присвоить true если он нужен, и false - если нет.
Далее так:
ArrayList mas = new ArrayList()
Foreach(TextBox tbx in this.Controls)
{
if ((Boolean)tbx.Tag)
{
mas.Add(tbx.Text);
}
}
Delirium
03-12-2011, 09:42
В какой последовательности будут обрабатывается текстбоксы »
А вот это неведомо :)
Это нада помещать их в контейнер или как то так? »
Если поместить их в одну Panel, то тогда надо написать
foreach(TextBox tbx in myPanel.Controls)
...
Цитата TRAMPLE:
В какой последовательности будут обрабатывается текстбоксы »
А вот это неведомо »
Плохо, ибо если в массив нужно помещать инфу с боксов в соответствующую ячейку...
Ну типа там Текстбоксы идут в стиле (Адрес, ФИО, телефон, год рождения и тд). И должны по порядку вписывается в массив.
Я думаю что они обрабатываются либо по мере их создания, либо по свойству TabIndex что было бы правильней, но увы не проверял пока.
Вообще когда я начал вспоминать былое, я не нашел каких то кардинальных отличий по сравнению с ВБ6, ну в том плане что в принципе всеми теми способами или так сказать "тактиками" которыми я писал проги в ВБ6 можно было использовать и здесь. Это первое с чем я столкнулся, и смотрю что поменялось многое. А вот то что элементам больше нельзя задавать индексы, это все таки плохо (
Delirium
03-12-2011, 16:50
TRAMPLE, ты сам создаешь себе проблемы. Обработку данных в TextBox лучше все таки делать вручную, а не циклами. Да, это дольше, но это правильней. Несложно ведь создать массив и написать что то вроде такого:
string[10] mass;
1. При обработке ФИО -
mass[0] = tbxFio.Text;
2. телефон
mass[1] = tbxPhone.Text;
И этот код ненамного длиннее кода с циклом, но это дает тебе полный контроль над данными и индексами в массиве.
И встречный вопрос - а зачем вообще заносить это в массив?
TRAMPLE, В конце концов храните "индексы" (цифры) в Tag для массива, и в цикле определяйте Tag и записывайте значение в индекс массива...
И встречный вопрос - а зачем вообще заносить это в массив? »
У меня вообще не телефоны и тд, у меня Год, месяц, день, час, минута, сикунда, долисикунда. И это все отсчитывается. Все данны вводятся в текстбокс (да это глупо, лучше сделать лейблы а для пользователя сделать отдельное окно запрос для ввода данных, но так нада, ибо пользователь должен иметь возможность в любое время остановит таймер и поменять значения) и после запуска они становятся не активны и идет отщет. Все данные с текстбоксов помещаются в массив, ну а дальше идет лесенка ифов (Т - это массив)
If T(2) > 0 Then
T(2) = T(2) - 1
ElseIf T(1) > 0 Then
T(1) = T(1) - 1
T(2) = 59
ElseIf T(0) > 0 Then
T(0) = T(0) - 1
T(1) = 59
T(2) = 59
Else
FuckEND()
End If
Ну это только для времени, а мне надо еще годе, месяц, день. Вот такой вот бздык.
Да, можно и без массива, но я ведь учусь )
В конце концов храните "индексы" (цифры) в Tag для массива, и в цикле определяйте Tag и записывайте значение в индекс массива... »
Я об этом думал, но ведь нельзя чтобы все текстбоксы были с одним именем, а ведь в цикле имя одинаковое, меняется только индекс.
У меня даже была крейзи идея, назвать все текстбоксы типа (Box1, Box2, Box3, Box4...)
И потом
name = "box"
For a=1 to 10
name=name & а
.
.
.
.
name= "box"
next a
Дума суть понятна, типа приставляем "индекс" к имени текстбокса, ну это бред помоему ))) И насколько я помню, в ВБ6 нельзя было так делать, потому что нельзя чтобы переменная содержала имя элемента, в данном случае name.text не распознает. Тут как я понимаю можно, указав что это контрол и тд, но все равно бред... не грамотно все это (
TRAMPLE, Я не предлагаю индексы хранить в имени TextBox`а . Почитайте повнимательнее. У каждого элемента, есть свойство Tag, в котором можно хранить все что душе угодно... Я и предлагал им воспользоваться...
Я не предлагаю индексы хранить в имени TextBox`а . Почитайте повнимательнее. У каждого элемента, есть свойство Tag, в котором можно хранить все что душе угодно... Я и предлагал им воспользоваться... »
Что касается вашего предложения, я тоже об этом не говорил. Я сказал о том что нельзя сделать одинаковые имена, то есть чтобы различие между двумя текстбоксами было только в свойстве Tag. Сделать "по старому" всеравно не получится.
В принципе проблема решена. Можно сказать что её как таковое и не было. Есть пути по которым можно решить данную задачу, но тем не мение, идею убрать возможность индексировать элементы считаю плохой. Если у нас программа это некий бланк, где есть множество текстбоксов, и потом данные с них нужно заносить в массив, то лучше способа чем
For a=0 to 29
mass(a)=text(a).text
next
по моему нету. Я просто думал что может сейчас это осуществляется как то по другом, но есть только альтернативы (
Verholom
13-12-2011, 12:52
Их нету еще с первой версии дотнета
Delirium
15-12-2011, 01:01
Verholom, кого нет, массивов? С чего бы ради. У каждого контейнера есть интерфейс IEnumerable, который как раз и представляет собой массив тех или иных элементов. И именно наличие IEnumerable позволяет работать циклу foreach.
Verholom
17-12-2011, 20:58
массивов элементов управления на формах! :read: :drug:
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.