2016-07-05 12 views
1

У меня есть 100 объект TEdit (например)Как использовать цикл, чтобы получить текст из TEdit один на один

Edit1, Edit2, Edit3 ... Edit100

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

+0

вы получите лучший ответ, если вы показать код, который вам нужна помощь на. Сообщество StackOverflow хмурится вопросами, которые кажутся домашней работой без каких-либо первоначальных усилий с оригинального плаката (вы в этом случае) – callisto

+0

Что вы храните эти объекты «TEdit», например, массив, список STL? Какие методы у вас есть на объекте TEdit, который вы хотите вызвать? Что вы хотите делать с данными? – LordWilmore

+0

Посмотрите на «FindComponentl (имя_компьютера)», а затем используйте его с «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 преобразования: если бросок не удается, возвращает нулевой указатель, и вы можете пропустить текущий контроль.

+0

Это будет работать, как показано, если элементы 'TEdit' являются * прямыми * дочерними элементами самой Формы, а не каким-либо другим контейнером« Parent »в форме, например Panel, Frame, TabSheet и т. д. Кроме того, этот цикл проходит через ВСЕ доступные элементы управления TEdit, но что, если ОП интересует только их подмножество? А также это учитывает только порядок создания, а не порядок именования. –

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

 Смежные вопросы

  • Нет связанных вопросов^_^