3

ボタンの後に数値を取得して、for ループでインクリメントする必要があります。たとえば、button1 は button2 になります。インクリメントする変数を追加しようとしましたが、C++ Builder で「ボタンは TMain のメンバーではありません」というエラーが表示されます。最終目標を達成する方法、またはこれを回避する方法はありますか?

4

1 に答える 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プロパティを適切に設定する必要があります。

もう 1 つの解決策は、コンポーネント名を省略して、オブジェクトを適切なコンテナー ( 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) {
  // ...
}
于 2012-07-03T13:38:51.483 に答える