Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Formular während laufzeit erstellen


Lucky - Mi 03.09.08 15:50
Titel: Formular während laufzeit erstellen
hallo,
ich habe mal wieder eine Frage u. zwar ich erstelle Form2 erst während der laufzeit u. rufe über dieses Form3(->zum Sortieren meines grid->befindet sich auf form2)auf. Nun bekomme ich wenn ich vom Form3 wieder auf form2 zugreifen möchte oder von diesem form(form2) einen parameter benutzen möchte einen fehler. "Zugriffsverletzung bei Adresse..."

Geht das net? bzw. muss ich wenn ich das so aufrufe auf irgendetwas besonders achten?

Vielen Dank schon mal im Voraus

mfg chris


Gausi - Mi 03.09.08 15:56

Wie erzeugst du denn die Form zur Laufzeit? Und wie greifst du von Form3 aus darauf zu?

Normalerweise sollte das nämlcih klappen.


Lucky - Mi 03.09.08 16:00

erstelle das form2 so tform2.Create(Application);

u. wollte ich einfach z.b. auf die variable form2.tabelle zugreifen...->die tabelle ist natürlich im public teil deklariert...


Gausi - Mi 03.09.08 16:04

Probiers mal mit Form2 := tform2.Create(Application);


Lucky - Mi 03.09.08 16:19

ah sieht gut, vielen dankt :flehan:


Lucky - Do 04.09.08 08:08

jetzt hab ich doch nochmal ne frage, aber eig. nur der verständlichkeitshalber8)
u. zwar warum funktioniert das so: Form2 := tform2.Create(Application);
u. nicht rein so: tform2.Create(Application); ??

Thanks schon mal im Voraus


Dunkel - Do 04.09.08 10:12

Dir fehlen wohl die Grundlagen der OOP, mach Dich da mal ein wenig schlau!

Kurz zusammengefasst: mit tform2.Create(Application); rufst Du den Construktor der TForm2-Klasse auf. Dieser Constructor legt dann eine Instanz der Klasse an, die Instanz gibt der Constructor als Rückgabewert zurück. Da Du den Rückgabewert einfach verfallen lässt, hast Du später auch nicht die Möglichkeit auf die Instanz zuzugreifen.


Tilman - Do 04.09.08 18:43

Nur der Vollstänidgkeit halber: Theoretisch ginge es noch über TAplication.components ;)


Yogu - Do 04.09.08 19:35

... oder du setzt einfach die Eigenschaft Visible des Formulars auf False und zeigst es später zur Laufzeit mit Form2.Show an. In deinem Fall sieht es so aus, als ob sowieso nur ein Form benötigt wird. Das kann man dann ohne Probleme gleich beim Programmstart erstellen lassen.