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

3

我需要在for循环中使按钮后面的数字递增。例如,button1变成button2等等。我尝试了附加一个变量进行递增,但C++ Builder会报错,指出“Button不是TMain的成员”。有没有办法实现最终目标或解决这个问题?


请说明您需要什么。您是需要制作带有“button1”、“button2”等文本的按钮,还是需要使用这样的名称制作按钮,或者您需要搜索具有此类名称的现有按钮? - SingerOfTheFall
抱歉,我想让标题这样做,以便它从表格中获取一个单词,并且我将其放在循环中,以便表格继续转到下一个记录,但只有第一个按钮里面才有一个单词。 - Azalima
1个回答

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) {
  // ...
}

好的,你的第一个解决方案解决了我的原始问题,但是我如何将表格中的数据分配给按钮的标题?我曾经尝试过这个:"Main->Button->Caption=Table2->FieldByName ("ItemName")->AsString;",但这只适用于名为button的一个按钮。而且使用这个解决方案时,它会说变量button已声明但从未使用过。 - Azalima
很简单。我向你展示了如何获取名为“Button1”或“Button2”的按钮控件的指针,并将其存储在名为button的变量中。因此,请使用该变量来分配每个按钮的标题:button->Caption = Table2->FieldByName("ItemName")->AsString。使用我的第二个示例:(*it)->Caption = ...。我不确定你所说的“原始问题”是什么意思。你的问题中只描述了关于Button不是成员的问题。我向你展示了它不需要成为成员,因为你可以通过其他方式访问按钮。 - Rob Kennedy
啊,非常感谢!问题已经解决了,我会记住这个的 :) - Azalima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接