![]() |
probleme beim prozeduraufrufen
Hi,
ist leider eine Anfängerfrage, aber ich hab nix dazu gefunden: Ich hab drei Forms, die erste wird automatisch erzeugt, die Zweite wird beim Create der Ersten erzeugt und die Dritte bei einem Klick auf einen Button der Zweiten. Das funktioniert ja soweit ;-) Jetzt möchte ich aber wenn ich auf einen Button in der dritten Form klick, dass eine public-prozedur in der zweiten Form aufgerufen wird und sich irgendein Element der zweiten Form ändert (zB: die Caption des Buttons). Die Prozedur kann ich aufrufen, aber sobald ich auf ein Element zugreifen möchte, bekomm ich eine EAccessViolation. Meine Frage ist wie kann ich das umgehen und vor allem: Wieso bekomm ich das nicht wenn ich nur zwei Forms erstelle (dh: die erste in obigen Beispiel weglasse)? Danke schon mal. |
Re: probleme beim prozeduraufrufen
Bei mir macht Dein Beispiel keine Zugriffsverletzungen. Wen hast Du denn als Owner in der create-Routine gesetzt?
Grüße, Messie |
Re: probleme beim prozeduraufrufen
Bist du dir sicher, dass das Formular und die komponenten, auf die du zugreifst, schon instantiiert sind?
|
Re: probleme beim prozeduraufrufen
Für den Owner hab ich nil und Self probiert: Dasselbe Problem. Ich poste mal den Code:
unit Unit1; uses Unit2; procedure TForm1.FormCreate(Sender: TObject); var Form: TForm; begin Form:=TForm2.Create(nil); Form.Show; end; unit Unit2; uses Unit3; procedure TForm2.Button1Click(Sender: TObject); var Form: TForm; begin Form:=TForm3.Create(nil); Form.Show; end; procedure TForm2.Test; begin Button1.Caption:='**'; end; unit Unit3; uses Unit2; procedure TForm2.Button1Click(Sender: TObject); begin Unit2.Form1.Test; end; Wie gesagt die Methode Test ist public. Instantiiert ist da alles richtig oder? |
Re: probleme beim prozeduraufrufen
Hallo,
schon, sonst würde es ja nicht laifen ;) aber... Unit2.Form1 ist NIL ! Du hast ja in deinen Methoden eine var TForm-Variable. Du musst schon schreiben Unit2.Form1:= TForm.Create(NIL) Dann kannst du auch gleich die Variablen mal besser bezeichnen, also Unit2.Form_WatWeesIch Wobei das alles schlechter Programmierstil ist, falls das "Test" nicht irgendwas im Form2 macht. Heiko |
Re: probleme beim prozeduraufrufen
...zusätzlich ist Deine Variable Form lokal in einer Ereignisroutine deklariert. Damit kannst Du nach dem FormShow meiner Meinung nach nicht mehr darauf zugreifen.
Grüße, Messie |
Re: probleme beim prozeduraufrufen
Hi,
versuche es mal so
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var Form: TForm; begin if Form = nil then Form := TForm.Create(Application); Form.Show; end; |
Re: probleme beim prozeduraufrufen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 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-2025 by Thomas Breitkreuz