如何引用连续的组件(button1,button2等)?

时间:2012-07-03 13:21:54

标签: c++ variables c++builder member

我需要在按钮之后获取数字以在for循环中递增。例如,button1变为button2等。我尝试添加一个增量变量,但C ++ Builder给出一个错误,说“按钮不是TMain的成员”。有没有办法实现最终目标或解决这个问题?

1 个答案:

答案 0 :(得分:2)

您无法在运行时从其他人​​构造新标识符。编译器是正确的Button实际上不是TMain类的成员。

相反,构建所需组件的字符串名称,然后调用表单的FindComponent方法以获取具有该名称的组件。

for (int i = 1; i <= 2; ++i) {
  std::string name = "Button" + IntToStr(i);
  TButton* button = dynamic_cast<TButton*>(this->FindComponent(name));
}

这要求相应地设置按钮'Name属性。

另一种解决方案是放弃组件名称并将对象放在适当的容器中,如vector。例如,您可以覆盖Loaded方法(您可以确定已创建所有表单的组件)并在那里填充向量:

void TMain::Loaded() {
  TForm::Loaded();
  this->m_buttons.push_back(Button1);
  this->m_buttons.push_back(Button2);
}

现在,当您想要迭代按钮时,只需迭代向量:

for (std::vector<TButton*>::const_iterator it = m_buttons.begin();
     it != m_buttons.end();
     ++it) {
  // ...
}