Mehrere (gleiche) Formen
-
Hi, ich hab eine Form in meinem Projekt bsw. "TestForm". Diese steuer ich mit meiner Mainform(Show()) an und übergebe einige Parameter z.b. WarnLabel->Caption = "blabla";
Das Problem liegt nur dabei, das ich eine schleife benutze.
Keiner Hilfe Code:
TStringList *liste = new TStringList(); for (int i=0;i<meincount;i++) { TestForm->WarnLabel->Caption = liste->Strings[i]; TestForm->Show(); }
Mein Problem ist, das er meine Form nur einmal anzeigt, ich will es bestens so machen, dass für jeden durchlauf der schleife, eine neue form erzeugt wird.
Wie mach ich das?
Ich nehme mal an:
TTestForm *test = new TTestForm(Application);
...Danke schonmal!
-
Original erstellt von Tillmann David:
**
Ich nehme mal an:
TTestForm test = new TTestForm(Application);
...*Und warum machstes dann nicht so?
Wenn du schon ne Schleife hast, würd ich dann aber auch n array, vector o.ä. nehmen.
-
Original erstellt von Eßer:
**Und warum machstes dann nicht so?
**Weil wenn ich das so mache, erzeugt er mir immer neue Formen bis ich alle geschlossen habe:
Bei diesem Code:
TTestForm *test = new TTestForm(Application); test->ShowModal(); delete test;
Wie mach ich das, das er soviele Forms erstellt, wie im count der for schleife vorhanden sind?
-
Indem du die Forms in der Schleife erstellst?!
-
Hatte ich ja gamcht, ging nicht!
Hab jetzt aber ne Lösung gefunden:
---TStringList *liste = new TStringList(); for (int i=0;i<meincount;i++) { TTestForm *TestForm = new TTestForm(Application); TestForm->WarnLabel->Caption = liste->Strings[i]; TestForm->Show(); }
-
Das enzige, was du mit dem Code erreichst ist ein Memory-Leak.
-
Mal ein konkreter Lösungsvorschlag:
- Vor der schleife ein array von TTestForm der größe meincount erstellen
- In der schleife array[i] = new TTestForm(Application)
- Später wieder löschen
-
Ok, ich probierst mal, dank dir!
PS: Wie erstellte man noch arrays? *g*
[ Dieser Beitrag wurde am 28.04.2003 um 16:42 Uhr von Tillmann David editiert. ]
-
Ich hab da mal folgenden FAQ Beitrag gefunden: Komponenten benutzen - zur Laufzeit erstellen, anzeigen und Events zuweisen
das
const int x = 10;
TTestForm *Test[x];funktioniert bei mir nicht. Er schmeißt mir folgenden fehler raus:
Constant expression requiredDas heisst ja, das ich wissen muss, wie groß die Arrayzahl ist!
[EDIT] DUDEN
[/EDIT]
Sorry hab aber noch nie in bcb mit array gearbeitet nur in php.
[ Dieser Beitrag wurde am 28.04.2003 um 17:02 Uhr von Tillmann David editiert. ]
-
Sollte eigentlich funktionieren - bei mir (BCB6) tuts das auch.
Welchen BCB haste denn? Haste alle Updates drauf?
-
Ja, habe den bcb 5 pro und einmal ein update gemacht.
Ist es schlimm, wenn ich meine oben geschilderte Methode nehme, oder würdest du davon abraten?
-
PS: Das hier geht doch:
const int x = 10; TTestForm *Test[x];
aber ich bin davon ausgegangen, das ich den Wert berechne:
const int x = meincount-list->Count; TTestForm *Test[x];
Da gibt er mir den fehler raus.
-
Du kannst einer konstanten Variable zur Laufzeit nunmal nichts zuweisen.
-
Ach so, da liegt der Hund begraben...
Versuchs mal mit DynamicArray oder std::vector.
Von deiner ersten Lösung würde ich insofern abraten, dass du 1. ein Memory-Leak kriegst (kein delete!) und alle Forms denselben Namen haben.
Da ist das Verhalten AFAIK nicht definiert.