窗体上对象的迭代
Iteration of objects on a Form
我是 Embarcadero C++Builder 的新手。我的问题是:是否可以用一个循环来迭代多个对象的属性?
示例:如果我有很多标签,如何做类似这样的:
for(int i=1; i<4; i++){
Label[i]->Caption = "xxxxx";
}
而不是这样写:
Labe1->Caption = "xxxxx";
Labe2->Caption = "xxxxx";
Labe3->Caption = "xxxxx";
您需要为此创建自己的数组。
在Form的header中定义数组:
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";
}
如果您使用 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);
}
您现在可以使用基于 for 循环的 C++11 范围迭代标签:
for(auto l : myLabels) {
l->Caption = "xxxxx";
}
我是 Embarcadero C++Builder 的新手。我的问题是:是否可以用一个循环来迭代多个对象的属性?
示例:如果我有很多标签,如何做类似这样的:
for(int i=1; i<4; i++){
Label[i]->Caption = "xxxxx";
}
而不是这样写:
Labe1->Caption = "xxxxx";
Labe2->Caption = "xxxxx";
Labe3->Caption = "xxxxx";
您需要为此创建自己的数组。
在Form的header中定义数组:
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";
}
如果您使用 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);
}
您现在可以使用基于 for 循环的 C++11 范围迭代标签:
for(auto l : myLabels) {
l->Caption = "xxxxx";
}