Autor Beitrag
Andi1982KA
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 19.10.02 15:28 
hallo alle zusammen,

ich habe eine MDI-Anwendung (Form1). Darin wird ein MDI-Child Fenster (Form3) mit folgendem Befehl geöffnet:

ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.MStartClick(Sender: TObject);
begin
   TForm3.Create(Self);
end;


Aus diesem Fenster heraus will ich ein anderes MDI-Child Fenster (Form4) öffnen aber Form3 dabei gleich schließen.

Mit folgendem Button öffne ich also Form4:

ausblenden Quelltext
1:
2:
3:
4:
procedure TForm3.Button13Click(Sender: TObject);
begin
   TForm4.Create(Form1);
end;


In Form4 Soll dann ein Button die Form3 schließen:

ausblenden Quelltext
1:
2:
3:
4:
procedure TForm4.Button1Click(Sender: TObject);
begin
   Form3.Close;
end;


Dann kommt aber immer ein Adressfehler. Ich denke dass sich das Programm merkt dass Form3 eigentlich Form4 erstellt hat und es deswegen nicht geschlossen werden kann oder so.

Achso, als FormClose-Ereignis bei Form3 habe ich action := CaFree; Weiss nicht ob das eine Rolle spielt!

Bitte helft mir, Gruss Andi!

_________________
Bald kann ichs allein ;-)
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 19.10.02 17:10 
Das liegt wohl daran, dass du der Variablen Form3 keine Instanz der Klasse TForm3 zugewiesen hast.
Anstatt TForm3.Create(Self); könntest du
Form3 := TForm3.Create(Self);schreiben.

_________________
Ist Zeit wirklich Geld?
Andi1982KA Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Sa 19.10.02 18:32 
Titel: Hat geklappt
vielen Dank,

ich versteh zwar nicht warum das so funktioniert :? , aber es geht :D

Also danke nochmal!

_________________
Bald kann ichs allein ;-)
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 19.10.02 18:44 
Mit TForm3.Create(...) setzt du die Variable Form3 noch nicht. Somit enthält Form3 den Wert nil. Wenn du nun mit Form3.Close auf Form3 zugreifst, wird eine Schutzverletzung ausgelöst, da Form3 eben nil enthält. Mit der Anweisung Form3 := TForm.Create(...) setzt du die Variable Form3 auf einen Wert, der die von dir gerade erzeugt Instanz enthält. Deswegen kann nun Form3.Close ohne AV aufgerufen werden.

_________________
Ist Zeit wirklich Geld?
Andi1982KA Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 20.10.02 16:05 
Achso, ich dachte das lag daran weil Form3 die Form4 eigentlich erstellt hatte und sie deswegen nicht schließen konnte weil es sozusagen die "Mutter" von ihr ist :) Naja, jetzt hab ichs aber verstanden.

Vielen Dank nochmal!

_________________
Bald kann ichs allein ;-)