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