![]() |
Delphi-Version: 10.4 Sydney
Zirkuläre Referenzen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
gibt es noch andere Wege eine zirkuläre Unit-Referenz zu vermeiden für diesen Anwendungsfall? (siehe Anhang) Am einfachsten wäre ja sonst im Implementation-Uses-Block der Unit uChildForm, uMainForm einzutragen. Damit hätte ich dann aber eine zirkuläre Unit-Referenz. Um dies zu vermeiden, könnte man das ja auch wie im Beispiel mit Events machen. Gibt es noch andere Möglichkeiten? |
AW: Zirkuläre Referenzen
Du kannst ein Interface entwickeln welches Du in einer globalen unit definierst, die keine andern Units einbindest. Dieses Interface implementierest Du dann für das Objekt, das die jeweilige Operation ausführst.
Eintragen im Implementation fall geht zwar, hat aber negative Auswirkung auf die Versionskontrolle (welche unit wurde verändert und muss neu erstellt werden) und, soweit ich weiß, auf die Compilierzeit. |
AW: Zirkuläre Referenzen
Zitat:
Hättest du da evtl. ein Beispiel? |
AW: Zirkuläre Referenzen
Unit3 enthält die Interfacedeklaration (praktisch könnte auch jeder seine egene Interfacedeklaration benutztn, so lange sie "gleich" sind, dann braucht man keine dritte Unit)
und dann verwenden beide Units 1 und 2 dieses Interface und schon haben sie unterienander keinerlei Abhängigkeiten mehr. |
AW: Zirkuläre Referenzen
Interfaces können auch mit Forms, Frames, DataModules etc. genutzt werden.
Delphi-Quellcode:
type
IMyMainForm_Interface = interface [GUUID] procedure OpenMainForm(Sender: Tobject); end; ... ... ... type TTMainForm = class(TForm, IMyMainForm_Interface ) ... procedure OpenMainForm(Sender: Tobject); end; |
AW: Zirkuläre Referenzen
Zitat:
Irgendwie versteh ich das gerade nicht. |
AW: Zirkuläre Referenzen
Liste der Anhänge anzeigen (Anzahl: 1)
Siehe Anhang. Ein skizzenhaftes Beispiel, ist natürlich verbesserungswürdig.
|
AW: Zirkuläre Referenzen
[/QUOTE]
Aber wie kann ich jetzt im uChildForm das MainForm öffnen ohne dies einzubinden? Irgendwie versteh ich das gerade nicht.[/QUOTE] In der globalen Unit (die braucht man dann doch) definierts Du eine globale interface referenz. In MainForm im OnCreate weist Du dies dann auf "Self" zu. Im Child fragst Du die Variable ab und kannst Deine Prozedur aufrufen. Alternativ kann natürlich jedes Child diese Variable haben und diese wird beim Erstellen gesetzt, sozusagen der "Owner" Edit: Der Vorschlag von TiGÜ implementiert dies - sogar für das Child. |
AW: Zirkuläre Referenzen
Zitat:
Ist aber nicht so wie ich es mir vorgestellt habe. Mit der Lösung kann ich nur mit jeweils einer Instanz von MainForm oder ChildForm arbeiten. Beim Öffnen möchte ich jedoch immer eine neue Instanz erzeugen. |
AW: Zirkuläre Referenzen
Liste der Anhänge anzeigen (Anzahl: 1)
Hier noch eine Lösung auf Basis von System.Messaging.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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 by Thomas Breitkreuz