![]() |
Zur Laufzeit erstellte Komponenten im Array verwalten
Hallo!
Ich weise 13 zur Laufzeit erstellte RadioGroups einem Array[1..13] zu, um mir Findcomponent zu sparen. Ebenso verfahre ich mit 13 Checkboxen, die einem Array[1..13] zugewiesen werden. Bei den Checkboxen gibt es kein Problem, ich kann auf alle zugreifen. Bei den RadioGroups wird mit der 13. Zuweisung das erste Feld des Array eliminiert, so dass Array[1] nil ist. Anders formuliert, würde die Schleife bei 12 enden, würde der Zugriff auf alle dem Array zugewiesenen Komponenten funktionieren, mit Nummer 13 wird aber Komponente Nummer 1 "rausgekegelt". Nachtrag: Letzter Satz stimmt so nicht. Habe die Schleife jetzt `mal bis 12 gezogen, auch da wurde Array[1] mit der letzten Zuweisung "rausgekegelt". Ich habe so etwas noch nicht erlebt. Dasselbe passiert übrigens auch, wenn ich das Array auf 14 dimensioniere. Bis zur Klärung habe ich mir so geholfen, dass ich Array[1] puffer und nach dem Durchlauf der Schleife dem Array[1] den Puffer zuweise. Hat da jemand einen Tipp? Gruß Rüd |
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Das Wichtigste: Wie sieht dein Code aus und wie soll dir jemand ohne das helfen können?
Hast du mal die Bereichsprüfung in den Projektoptionen aktiviert? Und was sagt der Debugger, wenn du mal nach dem Wert schaust, während sich das Array langsam füllt? |
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
<Glaskugel mode="on">
Die beiden Arrays liegen in der Deklaration hintereinander, Du vertust dich bei deinem Arrayindex um +1 und anstatt auf das letzte Element des ersten Arrays zuzugreifen, greifst Du auf das erste Element des zweiten Arrays zu:
Delphi-Quellcode:
</Glaskugel>
var
Array1 : Array [0..12] Of TFoo; Array2 : Array [0..12] Of TFoo; begin Array1[13] := Bar; // Hier wird Array2[0] beschrieben! PS: Hör auf himitsu. |
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Das ist der betreffende Code, der mit der Krücke klappt. TFrfrTippFeld ist ein Frame, deren Komponenten über Findcomponent angesprochen werden.
Delphi-Quellcode:
var
FMain: TFMain; PSpiele:array[1..11] of TPanel; Edits:array[1..11,0..3] of TEdit; RGTipps:array[1..11] of TRadioGroup; cbTipps:array[1..11] of TCheckBox; implementation ........... ........... procedure TFMain.FormCreate(Sender: TObject); var FRA:TFrame; a,b:integer; RGPuf:TRadioGroup; begin for a := 1 to 11 do begin FRA := TFrfrTippFeld.Create(FMain); with FRA do begin left := 0; top := 10+ (a-1)*51; name := 'frSpiel'+inttostr(a); height := 45; width := 900; end; FRA.parent := PFeld; PSpiele[a] := TPanel(Fra.findcomponent('PSpiel')); PSpiele[a].Color := MitFarben[1]; TLabel(Fra.findcomponent('LNr')).Caption := 'Spiel '+inttostr(a); for b := 0 to 4 do Edits[a,b] := TEdit(Fra.findcomponent('Edit'+inttostr(b))); RGTipps[a] := TRadioGroup(Fra.findcomponent('RGTipp')); cbTipps[a] := TCheckBox(Fra.findcomponent('cbTippen')); if a = 1 then RGPuf := RGTipps[a]; //Krücke Teil 1 end; RGTipps[1] := RGPuf; ////Krücke Teil 2 ........... ........... Zitat:
Gruß Rüd |
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Zitat:
Zitat:
|
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Auf den ersten Blick :
Delphi-Quellcode:
EDIT : Hach, immer isser schneller *wein
var
Edits:array[1..11,0..3] of TEdit; // <- 0..3 ........... ........... // aber 0..4 -> PENG for b := 0 to 4 do Edits[a,b] := TEdit(Fra.findcomponent('Edit'+inttostr(b))); ........... ........... |
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Hast aber lange geblickt, wie? :zwinker:
|
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Irgendwas hat an meinem Text nicht gestimmt, der hat immer behauptet dass mein Text zu kurz sei und dann musst ichs x-mal abändern *schnief ... wertvolle Zeit verloren dadurch.
|
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Die Welt ist eben hart, aber ungerecht. Nächstes Mal bist Du dann wieder schneller *tröst*
|
AW: Zur Laufzeit erstellte Komponenten im Array verwalten
Und am Ende läuft es auf Eines hinaus ... hätte man mal probehalber die Bereichsprüfung aktiviert
oder sich zumindestens mal die Array-Bereiche mit den Zugriffen verglichen, dann wäre das Problem "sofort" aufgefallen. Man hätte auch mal mit dem Debugger schauen können und dann wäre da eventuell aufgefallen, daß sich der Wert beim Zugrüff auf das andere Array ändert. Codeformatierung = na ja Und warum gibt es hier so viele globale Variablen? (die gehören doch wohl eher ins Private der Form) @baumina: alle Zitate (qoute) wegdenken, Leerzeichen wegdenken und der Rest muß eine gewisse Länge haben. Und wenn der Rest auch noch nur aus Großbuchstaben besteht, dann wird alles automatisch klein gemacht. :wall: (selbst wenn es sich um eine großgeschriebene Abkürzung handelt) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz