2016-07-05 3 views
1

I 100 haben, um Gegenstand von TEdit (zum Beispiel)Wie eine Schleife verwenden, um Text aus TEdit eins nach dem anderen

Edit1, Edit2, Edit3 ... Edit100

Wie eine Schleife benutzen Sie Text von ihnen eins nach dem anderen?

+0

Sie eine bessere Antwort bekommen würde, wenn Sie einen Code zeigen, die Ihnen helfen zu müssen. Die StackOverflow-Community runzelt sich über Fragen, die wie Hausaufgaben aussehen, ohne dass der ursprüngliche Poster (in diesem Fall) anfängt. – callisto

+0

Wie speichern Sie diese "TEdit" -Objekte in z. ein Array, eine AWL-Liste? Welche Methoden haben Sie für das TEdit-Objekt, das Sie aufrufen möchten? Was möchten Sie mit den Daten machen? – LordWilmore

+0

Werfen Sie einen Blick auf 'FindComponentl (Komponentenname)' und verwenden Sie dann das mit '" Edit1 "', '" Edit2 "' usw. Die Namen können in einer Schleife generiert werden. –

Antwort

0

So etwas sollte funktionieren:

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

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

Der Code basiert auf der dynamic_cast Umwandlung: Wenn die Umwandlung fehlschlägt es einen Null-Zeiger zurückgibt und Sie können die aktuelle Steuer überspringen.

+0

Dies würde nur wie gezeigt funktionieren, wenn Die 'TEdit'-Steuerelemente sind * direkte * Kinder des Formulars selbst und nicht irgendein anderer 'Eltern'-Container auf dem Formular, wie ein Panel, Frame, TabSheet, etc. Und auch das durchläuft ALLE verfügbaren' TEdit'-Steuerelemente, aber Was ist, wenn das OP nur an einer Untergruppe von ihnen interessiert ist? Und auch das berücksichtigt nur die Erstellungsreihenfolge, nicht die Reihenfolge. –

+0

@RemyLebeau Nun, es ist wahr, aber das Snippet ist nur ein "Proof of Concept". Es kann mit Rekursion erweitert werden, um verschachtelte Steuerelemente zu handhaben (das Filtern der Ergebnisse ist ziemlich einfach). In der Tat könnte die Baumdurchquerungsreihenfolge ein Problem sein. – manlio

1

Ich würde vorschlagen, ein Array für die Verwendung, zB:

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) ; 
} 
Verwandte Themen