Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Внизцикл по компонентам Найти похожие ветки
← →
ArtemB (2003-03-27 08:07) [0]Меня давно мучает вопрос: как в цикле удобней всего пробежаться по компонентам (например меткам) ?
Я знаю 2 решения:
1)Создать массив (TLabel) обозн.ибегать
2)Через Tag компонента (дать одинак. Tag)и бегать потом по тем, у кот.Tag одинаковый.
А КАК ЕЩЕ??? Должно быть проще (for i:=0 to ....)
← →
Opuhshii (2003-03-27 08:20) [1]2ArtemB © (27.03.03 08:07)
"Должно быть проще" точно,..
procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
begin
for I:=0 to Pred(ComponentCount) do begin
if Components[I] is TLabel then begin
TLabel(Components[I]).Caption:="MyEdit"+IntToStr(I);
end;
end;
end;
← →
Anatoly Podgoretsky (2003-03-27 08:40) [2]Массив уже есть, это и упоямянутый выше Components и Controls для наследников TWinControl.
С тегими могут быть (и бывают) проблемы, не контроллируемая ООП территория, могут оказаться одинаковые теги или просто неверные. Я видел много ошибок (трудноуловимых) по причине использования тегов.
В некоторых особых случаях действительно нужен массив/список, например и такой есть готовый TObjectList, это нужно когда объектов много или нужна только часть из всего количества однотипных, а теги не хочется использовать по выше указанной причине. Я за свою долгую практику никогда не использовал теги для этой цели, только в строго контроллируемых случаях.
← →
ArtemB (2003-03-27 09:04) [3]В данном случае компонентов TLabel много, а пробегать нужно только по компонентам, кот. называются Label1,...,Label10
Как тогда то быть?
← →
Anatoly Podgoretsky (2003-03-27 09:10) [4]Тогда еще проще FindComponent, без всяких массивов
← →
ArtemB (2003-03-27 09:21) [5]if FindComponent("Label"+"i" ).Name then FindControl.Name:=TablGrid.Columns.Items[i].Title.Caption;
т.е. мне в отчете надо название заголовка таблицы(лабл) сделать такое же как название соответ. столбца DBGrid
(заморочка в том, что нельзя жестко назвать зоголовки в отчете,т.к. пользователь может переставлять столбцы или вовсе убрать их)Поэтому и понадобилось называть их (заголовки в отчете) таким образом.
И к тому же хочется в цикле.... вот и понадобилось Label+"i"....
← →
ArtemB (2003-03-27 09:22) [6]Да... забыл.... так FindComponent не работает... а как???
← →
Anatoly Podgoretsky (2003-03-27 09:40) [7]FindComponent работает отлично
← →
Leshiy (2003-03-27 09:45) [8]ArtemB © (27.03.03 09:22)
Да... забыл.... так FindComponent не работает... а как???
var tg:TComponent;
tg:=FindComponent("Label"+IntToStr(i));
TLabel(tg). ...;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c