Как использовать цикл для получения текста из TEdit по одному

У меня есть 100 объектов TEdit (например)

Edit1, Edit2, Edit3... Edit100

Как использовать цикл, чтобы получить текст из них один за другим?

3 ответа

Я бы предложил использовать для этого массив, например:

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...
}
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) ;
}

Примерно так должно работать:

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

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

Код основан на dynamic_cast преобразование: если приведение не выполнено, возвращается нулевой указатель, и вы можете пропустить текущий элемент управления.

Другие вопросы по тегам