Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в цикле перебрать допустим 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо