Как использовать цикл для получения текста из 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
преобразование: если приведение не выполнено, возвращается нулевой указатель, и вы можете пропустить текущий элемент управления.