for (int i=0;i<Form1->ComponentCount;i++)
{
ShowMessage(AnsiString(Form1->Components->ClassName())+" "+Form1->Components->Name);
}
Можно ли получить доступ к свойствам объекта через, например, строку с его названием?
Например,есть 10 лейблов (label). Нужно им всем присвоить надписи (их свойствам caption)(разные). Можно это сделать циклом, обращаясь к массиву строк с их названиями, например, или нет?
AnsiString names[5] = {"Label1","Label2","Label3","Label4","Label5"};
AnsiString captions[5] = {"Label1","Label2","это 3","и 4","и еще 5"};
for(int i=0;i!=5;i++)
{
TLabel* l = dynamic_cast<TLabel*>(FindComponent(names));
l->Caption = captions;
}
Цитата:
Originally posted by Hawker
Например,есть 10 лейблов (label). Нужно им всем присвоить надписи (их свойствам caption)(разные). Можно это сделать циклом, обращаясь к массиву строк с их названиями, например, или нет?
Например,есть 10 лейблов (label). Нужно им всем присвоить надписи (их свойствам caption)(разные). Можно это сделать циклом, обращаясь к массиву строк с их названиями, например, или нет?
Код:
мысль я думаю ясна :)
пример выдаёт мессаги с Типами и Именами всех компонент лежащих на форме Form1. Соответственно имеешь полную свободу действий - всё перебираешь,с компонентами с нужным признаком (тип, или тэг) делаешь что тебе надо. Так же можно поступать перебирая все подчинённые компоненты Панелей и Групп, ну и т.д.
А можно просто (TLabel*)FindComponent(...)?
Цитата:
Originally posted by Hawker
А можно просто (TLabel*)FindComponent(...)?
А можно просто (TLabel*)FindComponent(...)?
естественно, хотя ваще динамиккаст безопаснее считается,но ваще и так сойдёт, лично у меня проблем не возникало.
AnsiString names[5] = {"Label1","Label2","Label3","Label4","Edit1"};
AnsiString captions[5] = {"Label1","Label2","это 3","и 4","и еще 5"};
for(int i=0;i!=5;i++)
{
TLabel* l = dynamic_cast<TLabel*>(FindComponent(names));
// если будет стоять
// TLabel* l = (TLabel*)FindComponent(names);
// то следующее условие не сработает т.е. в l загониться не корректная информация
// а оно вам надо?
if(!l) continue;
l->Caption = captions;
}