![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Всем здравствуйте. Есть форма, на ней находится двадцать элементов типа label, с именами label1, label2...label20. При определенном событии, допустим при нажатии на кнопку в каждом лейбе нужно вывести одинаковый текст. Вопрос, есть ли возможность обойтись от такого подхода
label1.caption='text; label2.caption:='text'; ... и написать какой-нибудь цикл, что-нить типо while (x<=20) do labelx.caption='text'; |
|
#2
|
|||
|
|||
|
А вот... заработало вот так.
создаем массив указателей: pLabels: array[1..20] of ^TLabel; Потом инициализируем их: pLabels[1] := @label1; pLabels[2] := @label2; ... pLabels[20] := @label20; А потом уже в цикле обращаемся for i:=1 to 20 do plabels[i]^.Caption:='text'; Изврат? Или нормально? |
|
#3
|
||||
|
||||
|
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to ComponentCount-1 do // перебираем все компоненты на форме
if Components[i] is TLabel // ищем нужные компоненты (TLabel)
then TLabel(Components[i]).Caption:='text'; // выполняем действие с компонентом (присваев текст)
end;Последний раз редактировалось Yurk@, 08.11.2009 в 21:25. |
|
#4
|
|||
|
|||
|
Вот, этот вариант приятнее. Спасибо
![]() |