Как обработать 22 TextBox'а в цикле?
есть код, где TBx(i) и CBx(i) массивы объектов TextBox и ComboBox, код рабочий конечно, но для его работы потребовалось построчное присваивание вида -
set CBx(1)=ComboBox1.
Собственно сам код:
lenst = Len(TBx(i).Value)
If lenst <> 0 Then
ii = ii + 1
fullsostavprod(2, i) = Val(TBx(i).Value)
If i >= 17 Then
fullsostavprod(1, i) = "Крем№" + Str(i - 16)
Else
fullsostavprod(1, i) = CBx(i).Text
End If
End If
Next i
List<ComboBox> c = new List<ComboBox>();
for (int i = 0; i < Controls.Count; i++)
{
if (Controls[i] is TextBox)
{
t.Add(Controls[i] as TextBox);
}
else if(Controls[i] is ComboBox)
{
c.Add(Controls[i] as ComboBox);
}
}
То есть индексация TextBox имеется, но общая для всех контролов формы ? Если не трудно, приведите пример такой индексации, в книгах которые у меня есть подобного не нашел(имеется только вариант кода с копированием объекта в переменные, как я и решил свою задачу).
Например писал вот такие функции для выделения и снятия выделения с 24-х чекбоксов:
Код на Delphi, не знаю на сколько будет вам полезен
var
I: BYTE;
begin
for I := 1 to 24 do (Form1.FindComponent(Format('CheckBox%d', [I])) as TCheckBox).Checked := TRUE;
end;
procedure AllCheckBoxesUnChecked();
var
I: BYTE;
begin
for I := 1 to 24 do (Form1.FindComponent(Format('CheckBox%d', [I])) as TCheckBox).Checked := FALSE;
end;
В данном случае, я просто привел пример обработки в цикле контролов с их разделением по "листам", я не решал конкретно вашу задачу. Ведь в любом случае прежде чем вы сможете обрабатывать контролы, они должны будут оказаться у вас на форме. Их добавление вы осуществляете хоть программно, хоть при помощи конструктора среды программирования — это не важно.... Важно то, что они в любом случае оказываются в коллекции Controls, через которую вы можете получить к ним доступ, зная тип контрола.... Мой пример — это пример такого доступа и разделения, а для решения вашей проблемы можно обойтись и без списков, находя требуемый контрол, по заданным заранее свойствам... Вот...
Могу просто уточнить задачу:
после заполнения всех ТекстБоксов, ЧекБоксов и Комбобоксов необходима проверка на суммарную правильность заполнения, а также передача полей ЧекБоксов и соответствующим им ТекстБоксов в массив предварительной обработки, также и с Комбобоксами и соответствующими им ТекстБоксами. При неправильности суммарного заполнения, нужно указать пользователю где он ошибся, при этом возможны и несколько ошибок. Работать в таком случае через индексацию самих контролов было б гораздо проще и удобнее, я решил(не до конца еще, как видно из кода) эту задачу передачей контролов в переменные(массивы объектов), Алексей показал как можно решаются подобные задачи через коллекцию Controls. Код QWERYTY полезен, только, насколько я понял (Form1.FindComponent(Format('CheckBox%d', )) as TCheckBox).Checked- в VBA не позволяется так делать.
Dim i1 As Integer, i2 As Integer
For i = 10 To 26
If necifra Then
i1 = 151
i2 = Ингридиенты.Count
necifra = False
Else
i1 = 1
i2 = 150
necifra = True
End If
If Me.Controls.Item(i).name = ("ComboBox" + CStr(i - 9)) Then
Me.Controls.Item(i).AddItem "Нет"
For ii = i1 To i2
Me.Controls.Item(i).AddItem Ингридиенты(ii).Имя
Next ii
Me.Controls.Item(i).ListIndex = 0
End If
Next i
End Sub