![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в цикле перебрать допустим combobox1, combobox2 [D7, XP]
Muh © (2008-07-09 07:55:00)Я хочу допустим присвоить combobox1, combobox2, combobox3, combobox4
присвоить значение 1..каждому комбобоху.
как это сделать в цикле?
спасибо
KilkennyCat (2008-07-09 18:00:00) [1]Это все сестрички - вредные привычки,
А Андрюша не причем!
{RASkov} (2008-07-09 10:07:00) [2]> [11] Василий Жогарев © (09.07.08 08:44)
Некоторые привычки вредные :)
Anatoly Podgoretsky (2008-07-09 10:05:00) [3]> Василий Жогарев (09.07.2008 8:44:11) [11]
Подобные привычки до добра не доведут.
Василий Жогарев (2008-07-09 08:44:00) [4]
> Григорьев Антон © (09.07.08 08:32) [10]
Согласен. Просто привычка всегда все проверять. :o)
Григорьев Антон (2008-07-09 08:32:00) [5]
> Василий Жогарев © (09.07.08 08:22) [8]
> Ну а вдруг он пытается это на пустой форме организовать.
> Мы откуда знаем... ?! ;o)
На пустой форме ComponentsCount = 0, и тело цикла for не будет ни разу выполнено. Какой смысл заставлять компилятор вставлять ещё одну проверку того, что он и так проверяет?
Muh (2008-07-09 08:30:00) [6]спасибо огромное врубился)
Василий Жогарев (2008-07-09 08:22:00) [7]
> Григорьев Антон © (09.07.08 08:16) [7]
Ну а вдруг он пытается это на пустой форме организовать. Мы откуда знаем... ?! ;o)
engine (2008-07-09 08:16:00) [8]> [4] Muh (09.07.08 08:14)
А справку почитать?
Тебе уже код дали, чего еще надо?
Muh (2008-07-09 08:16:00) [9]оперативно вы :) щас буду врубаться)
Григорьев Антон (2008-07-09 08:16:00) [10]
> Василий Жогарев © (09.07.08 08:09) [3]
А зачем вот это?
>if c > 0 then
> for i := 0 to c - 1 do
for проверяет условие до выполнения итерации цикла, поэтому, если c = 0, цикл и так ни разу не выполнится.
Muh (2008-07-09 08:14:00) [11]а где тут задается значение количества комбобохов?
допустим их 25..
почему счет с 0 начинается?
Григорьев Антон (2008-07-09 08:09:00) [12]1-ый вариант:
for I := 0 to ComponentCount - 1 do
if Components[I] is TComboBox then
TComboBox(Components[I]).ItemIndex := 1;
Перебирает все компоненты, владельцем которого является форма (точнее, тот объект, в методе которого вызывается этот код), проверяет, является ли найденный компонент ComboBox'ом и если да, присваивает ему то, что нужно. Достоинство - не привязан к именам ComboBox'ов, недостаток - изменит все ComboBox'ы, а в некоторых случаях требуется менять только часть.
2-ой вариант:
var
Combo: TComboBox;
for I := 1 to MaxComboBoxNumber do
begin
Combo := TComboBox(FindComponent('ComboBox' + IntToStr(I)));
if Assigned(Combo) then
Combo.ItemIndex := 1
end;
Ищет среди принадлежащих форме компонентов все, имена которых имеют вид 'ComboBox<N>', где N меняется от 1 до MaxComboBoxNumber, и присваивает им то, что нужно. Достоинства - легко сделать фильтр по именам и затрагивать не все ComboBox'ы. Недостатки: во-первых, если компонент, отличный от TComboBox, вдруг будет иметь имя 'ComboBox<N>', возникнет ошибка (это, впрочем, легко устраняется дополнительной проверкой), а во-вторых, FindComponent - очень медленная операция, способ получается затратным с точки зрения процессорного времени.
Василий Жогарев (2008-07-09 08:09:00) [13]
procedure TForm1.Button1Click(Sender: TObject);
var
c, i: Integer;
begin
c := ComponentCount;
if c > 0 then
for i := 0 to c - 1 do
if Components[i] is TComboBox then
begin
(Components[i] as TComboBox).ItemIndex := 0;
(Components[i] as TComboBox).Items.Add('1');
end;
end;
Или я тебе не пойму... ?
engine (2008-07-09 08:04:00) [14]for i := 0 to ComponentCount - 1 do
if Components[i] is TComboBox then
(Components[i] as TComboBox).Tag := 1;