表单上对象的迭代

时间:2018-11-05 15:22:38

标签: c++ loops c++builder

我是Embarcadero C ++ Builder的新手。我的问题是:是否可以通过循环迭代多个对象的属性?

示例:如果我有很多标签,怎么可能做与此类似的事情:

 for(int i=1; i<4; i++){
    Label[i]->Caption = "xxxxx";
 }

而不是这样写:

Labe1->Caption  = "xxxxx"; 
Labe2->Caption  = "xxxxx"; 
Labe3->Caption  = "xxxxx";

2 个答案:

答案 0 :(得分:4)

如果您使用IDE创建了TLabel,则需要手动创建一个容器来存储指向它们的指针。

在表单头文件中:

#include <vector>

并将其添加到表单的受保护部分:

std::vector<TLabel*> myLabels;

并将其添加到构造函数中:

myLabels.push_back(Label1);
myLabels.push_back(Label2);
myLabels.push_back(Label3);

也许甚至是这样:

for(int c=0; c<ComponentCount; ++c) {
    TLabel* tmp = dynamic_cast<TLabel*>(Components[c]);
    if(tmp) myLabels.push_back(tmp);
}

您现在可以使用基于循环的C ++ 11范围遍历标签:

for(auto l : myLabels) {
    l->Caption = "xxxxx";
}

答案 1 :(得分:3)

您需要为此创建自己的数组。

在表单的标题中,定义数组:

private:
    TLabel* labels[4];

然后在表单的构造函数中填充数组:

labels[0] = Label1;
labels[1] = Label2;
labels[2] = Label3;
labels[3] = Label4;

或者:

for(int i = 0; i < 4; i++){
    labels[i] = static_cast<TLabel*>(FindComponent("Label"+IntToStr(i+1)));
}

然后您可以在需要时遍历数组:

for(int i = 0; i < 4; i++){
    labels[i]->Caption = "xxxxx";
}