GroupBox->Components[i], wie komm ich daran?
-
Ich habe in meiner GroupBox Volk mehrere LabeledEdit`s, und möchte diese über folgende Schleife ändern, nur irgendwie klappt das nicht.
Seht ihr den Fehler?
for( int i = 0; i < Volk->ComponentCount; i ++ ) { TLabeledEdit *t = (TLabeledEdit*)Volk->Components[i]; t->EditLabel->Caption = einheiten->Strings[i]; }MfG
Edit: Ok er scheint die Schleife nicht mal anzufangen
Edit2: Ok statt Count muss man Index nehmen, sry ^^
Edit3: Nur irgendwie komm ich nicht an die Komponenten, überschreitet das MAximum der Liste oder so sagt er
-
Hallo
Zunächst einmal ist es für uns nicht klar ob in dem Parent Volk wirklich auschließlich nur Controls vom Typ TLabeledEdit sind. Das wäre schonmal die erste Quelle für undefiniertes Verhalten.
Auch der alte C-Cast ist unschön, benutzt lieber C++ (static_cast, auch wenn das hier keine funktionalen Auswirkungen hat).
Die Exception deutet auf ein Arrayzugriff hin mit einem Index der über der Anzahl der Elemente liegt. Die mögliche Quelle dafür wäre der Zugriff auf einheiten->Strings.Also meine Ratschäge :
- Benutzt den Debugger um die Ursache zu finden. Diese liegt sicher nicht im gezeigten Quellcode, dort ist nur der Auslöser
- Schau dir in der FAQ hier im BCB-Forum an wie man Arrays von Controls besser behandelt.bis bald
akari
-
Ne ComponentCount ist schon richtig gewesen.
Du musst deiner GroupBox aber noch die zugehörigen Komponenten mitteilen.Volk->InsertComponent(...)
-
Hallo
InsertComponent ist nicht nötig wenn man sowieso den Parent zuweist.
Außerdem würden fehlende Child in Volk auch keine Exception auslösen, da dann einfach nicht iteriert wird. Die Exception kommt ja gerade deswegen weil Controls in Volk sind und diese behandelt werden.bis bald
akari
-
habs hinbekommen *freu*
for( int i = 0; i < Volk->ControlCount; i ++ ) { if( Volk->Controls[i]->GetNamePath() == "SubLabel" ) { TLabel *l = (TLabel*)Volk->Controls[i]; l->Caption = einheiten->Strings[i]; } }