Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: Form2 soll auf das ClientSocket von Form1 zugreifen

  Alt 10. Jun 2007, 22:00
Hallo,

ich habe den Eindruck, dass du die in diesem Thread gemachten Lösungsvorschläge gar nicht bewerten kannst. Es besteht jetzt die Gefahr, dass wir dir ein Detailproblem lösen und dich damit auf einem Holzweg begleiten.

Wenn du eine Komponente aus der Palette auf eine Form (Form1) ziehst, dann werden ihre wesentlichen Eigenschaften in der DFM-Datei (letzten Endes ein resource file) gespeichert und beim Erzeugen der Form wird die Komponente zusammen mit dieser instanziert. Die Form ist dabei der Eigentümer dieser Komponente und der Lebenszyklus der Komponente ist an den Lebenszyklus der Form gebunden. Wird die Form zerstört, dann wird auch die Komponente zerstört.

Übergibst du eine solche Komponente an eine andere Form (Form2), so wird dort eine Referenz gespeichert. Eigentümer bleibt die andere Form (Form1) und es ergeben sich Zugriffsprobleme, wenn Form1 zerstört wird, denn dann wird auch die Komponente zerstört und die Referenz in Form2 wird ungültig. Es ist deine Aufgabe dann dafür zu sorgen, dass die Referenz auf nil gesetzt wird.

Solange du also den Vorschlag von Jens aus Beitrag #3 umsetzt, hast du in Form2 eine Referenz und kein eigenständiges Objekt. Also musst du dort auch keine Instanzierung durchführen, das geschieht ja schon in Form1 - wie oben erläutert. Dein Fehler hat eine andere Ursache.

Deiner Klasse in Beitrag #4 fehlt übrigens ein Konstruktor, der die Objektvariable vom Typ TClientSocket instanziert - und eine entsprechender Destruktor, der sie wieder zerstört.

Gute Nacht.
  Mit Zitat antworten Zitat