![]() |
Delphi-Version: XE2
2 Formulare verbinden geht nicht :(
Moin,
ich hab 2 Formulare in meinem Projekt mein hauptformular (form1 in unit1) und das 2. (form2 in unit2) wenn ich von form1 auf form2 zugreife geht das
Delphi-Quellcode:
wenn ich jedoch danach von form2 auf form1 zugreifen will geht das nicht
//Form 1
uses Unit2; ... procedure sag_hallo(); begin Form2.Visible:=true; Form2.Label1.Caption:='Hallo'; end; end.
Delphi-Quellcode:
als fehler kommt nicht genügend arbeitsspeicher, ich hatte den fehler schon öfters
//Form 2
uses Unit1; ... procedure sag_hallo(); begin Form1.Visible:=true; Form1.Label1.Caption:='Hallo'; end; end. und es kam IMMER wenn ich versuchte 2 formulare zu verknüpfen also mit dem einem aufs jeweils andre zuzugreifen mich intressiert ob man das irgendwie anders machen kann oder ob ich irgendwo noch was schreiben muss danke schonma im voraus :) PS: das beispiel ist natürlich völliger schwachsinn und dient nur zum verständnis des problems |
AW: 2 Formulare verbinden geht nicht :(
Hallo,
dein Beispiel hilft leider wenig, weil Du nichts dazu sagst, wann und durch was diese beiden Funktionen aufgerufen werden. Zu wenig Arbeitsspeicher interpretiert meine Glaskugel als einen vollen Stack, ausgelöst durch eine nie endende Rekursion. Grüße |
AW: 2 Formulare verbinden geht nicht :(
ich hab schon verschiedenes ausprobiert und auch auf andre weisen versucht auf die jeweils andre form zuzugreifen, der fehler wird aber schon angezeigt sobald ich die unit1 bei form2 erst einbinde, das heißt selbst wenn ich nix von form1 will aber nur die unit einbinde geht es nicht
|
AW: 2 Formulare verbinden geht nicht :(
als fehler steht zirkuläre unit-referenz falls ihr damit was anfangen könnt
|
AW: 2 Formulare verbinden geht nicht :(
ach wartet da gibs was im forum, ich nehme mal an das thema ist geschlossen
|
AW: 2 Formulare verbinden geht nicht :(
Hi,
der Fehler zirkuläre Unit Referenz erscheint nur dann, wenn du bei Unit 2 die Unit 1 an der falschen Stelle einbindest. So sollte es funktionieren: Bei Unit 1:
Delphi-Quellcode:
unit Unit1;
interface uses Unit2 implementation end. Bei Unit 2:
Delphi-Quellcode:
unit Unit2;
interface uses Windows, ... implementation uses Unit1; end. |
AW: 2 Formulare verbinden geht nicht :(
Zitat:
|
AW: 2 Formulare verbinden geht nicht :(
Lustigerweise meldet zumindest mein XE2-Ent bei solchen Geschichten ein "Voller Arbeitsspeicher" bei [STRG]+[F9] und "zirkuläre Referenz" bei [F9] - Oder umgekehrt :)
|
AW: 2 Formulare verbinden geht nicht :(
Zitat:
Delphi-Quellcode:
Ich habe hier eine Klasse entwickelt, die Zugriff auf Komponenten der Klasse TFormMain (Hauptformular) ermöglicht, und zwar von jeder anderen Unit oder Form aus, die diese Klasse referenziert. Da gab's noch nie irgend einen Fehler, den ich nicht selbst verbockt hatte. Du kannst auch zwei Forms direkt verbinden, indem du den Unit-Namen der einen Form unter Implementation (nicht unter Interface!) in die Uses-Klausel einträgst. Ich hab z.B. manchmal im Hauptformular das Datenmodul referenziert und im Datenmodul das Hauptformular, immer jedoch unterhalb von Implementation. Das ist ganz wichtig!
{ ****************************************************************************************************************
*** ZUGRIFF AUF UNITMAIN für EINSTELLUNGEN ETC. *** **************************************************************************************************************** } unit Main_Zugriff; INTERFACE USES Vcl.Forms, System.Classes, System.SysUtils, JvRichEdit, JvDBRichEdit, Vcl.DbGrids; TYPE TMain_Zugriff = CLASS PRIVATE PUBLIC Spalten_Filmtitel : Integer; CONSTRUCTOR Create(); DESTRUCTOR Destroy; override; PROCEDURE Set_FormMain(Const Links, Oben, Breit, Hoch : Integer; Const Maximiert : Boolean); PROCEDURE Get_FormMain(Var Links, Oben, Breit, Hoch : Integer; Var Maximiert : Boolean); PROCEDURE StatusBarAktuell; PROCEDURE LaenderEinlesen; PROCEDURE LaenderAnzeigen; PROCEDURE Set_Spalte_FilmTitel(Const Spalte,Breite : Integer); FUNCTION Get_Spalte_FilmTitel(Const Spalte : Integer) : Integer; END; IMPLEMENTATION USES UnitMain, UnitData; // Hier eintragen {+-+- PUBLIC METHODEN -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-} { **************************************************************************************************************** *** CREATE *** **************************************************************************************************************** } constructor TMain_Zugriff.Create; begin Spalten_Filmtitel := FormMain.DBGrid_Filmtitel.Columns.Count; end; { **************************************************************************************************************** *** DESTROY *** **************************************************************************************************************** } destructor TMain_Zugriff.Destroy; begin inherited; end; ... |
AW: 2 Formulare verbinden geht nicht :(
Eigentlich sollte man es aber vermeiden, dass 2 Klassen sich gegenseitig kennen müssen. Dasselbe gilt für Fomulare (sind ja schließlich auch nur Klassen). Wenn ein Formular eine Schnittstelle (etwa in Form einer Property) anbietet, kann ein anderes darüber auf das Formular zugreifen und ggf. vice versa. Dafür ist es dann aber nicht mehr notwendig, dass das Fomular mit der Schnittstelle das andere kennt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 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