2016-07-05 6 views
1

에 의해은 TEdit 하나의 텍스트를 얻기 위해 루프를 사용하는어떻게 (예를 들어) <code>TEdit</code> 100 개체가 하나

EDIT1, Edit2가, EDIT3 ... Edit100 얻을 수있는 루프를 사용하는 방법

그 (것)들에게서 하나씩 텍스트? 이 같은

+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 변환을 기반으로합니다 캐스트는 널 포인터를 반환하고 전류 제어를 건너 뛸 수 있습니다 실패 할 경우.

+0

이것은 다음과 같이 작동합니다. if 'TEdit' 컨트롤은 Panel, Frame, TabSheet 등과 같이 Form 자체의 * 직접 * 자식이며 폼의 다른 '부모'컨테이너가 아닙니다. 또한이 컨트롤은 사용 가능한 모든 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) ; 
}