2016-07-05 8 views
1

によってTEDIT 1からテキストを取得するためにループを使用するは、どのように私は(例えば)<code>TEdit</code>の100オブジェクトを持つ1

EDIT1、EDIT2、EDIT3 ... Edit100取得するためにループを使用する方法

それらのテキストを1つずつこの動作するはずのような

+0

あなたはあなたが助けが必要ないくつかのコードを表示する場合は、より良い反応を得るでしょう。 StackOverflowコミュニティは、元のポスターからの初期の努力なしに宿題のように思える質問に悩まされます(この場合はあなたです) – callisto

+0

これらの 'TEdit'オブジェクトは何に保存していますか?配列、STLリスト?呼び出すTEditオブジェクトにはどのようなメソッドがありますか?あなたはそのデータで何をしたいですか? – LordWilmore

+0

'FindComponentl(componentname)'を見て、それを '' Edit1''、 '' Edit2''などと一緒に使ってください。名前はループで生成することができます。 –

答えて

0

何か:

for (int i = 0; i < form->ControlCount; ++i) 
{ 
    TEdit *edit = dynamic_cast<TEdit *>(form->Controls[i]); 

    if (edit) 
    ShowMessage(edit->Text);   
} 

コードがdynamic_cast変換に基づいています。キャストが失敗した場合にはNULLポインタを返し、現在の制御をスキップすることができます。

+0

これは、次のように表示されます。 'TEdit'コントロールはフォームの*直接*子であり、Panel、Frame、TabSheetなどのフォーム上の他の' Parent'コンテナではありません。また、これは利用可能なすべての 'TEdit'コントロールをループします。 OPが代わりにそれらのサブセットに興味があるのであればどうでしょうか?また、これはオーダーの命名ではなく、作成オーダーを考慮に入れています。 –

+0

@RemyLebeauまあ、それは本当ですが、スニペットは単なる "概念の証明"です。ネストされたコントロールを処理するために再帰で拡張することができます(結果のフィルタリングは非常に簡単です)。確かに、木の巡回秩序が問題になる可能性があります。 – manlio

1

私は例えば、そのために配列を使用することをお勧めします:

class TForm1 : public TForm 
{ 
__published: 
    TEdit *Edit1; 
    TEdit *Edit2; 
    TEdit *Edit3; 
    ... 
private: 
    TEdit* edits[100]; 
    ... 
public: 
    __fastcall TForm1(TComponent *Owner); 
    ... 
}; 

__fastcall TForm1::TForm1(TComponent *Owner) 
{ 
    for(int i = 0; i < 100; ++i) 
    { 
     edits[i] = static_cast<TEdit*>(FindComponent("Edit"+IntToStr(i+1))); 
    } 
} 

... 

for(int i = 0; i < 100; ++i) 
{ 
    // use edits[i]->Text as needed... 
} 
0
TEdit *tmpEdit = NULL ; 
vector <AnsiString> tmpStr ; 
for(int i = 0; i < 100; ++i) 
{ 
    tmpEdit = static_cast<TEdit*>(FindComponent("Edit"+IntToStr(i+1))); 
    tmpStr.push_back(tmpEdit->Text) ; 
} 
関連する問題