Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Delphi Illegal Circular Reference
Delete - Di 12.11.13 21:16
Titel: Delphi Illegal Circular Reference
Moin,
ich habe ein Problem beim Schreiben eines Programmes. Ich möchte, dass zwei Formulare miteinander Variablen austauschen können. Also wollte ich die Variable als public deklarieren und danach bei Form2 schreiben form1.variablenname:='xy'; Ich habe also bei Form2 Unit1(also Form1) in die uses geschrieben. Da Form2 aber aus Form1 gestartet wird, steht dort unit2 in den uses. Deswegen gibt Lazarus die oben stehende Fehlermeldung aus. Wisst ihr, wie ich vorgehen kann? Ich habe schon versucht ein Formular dazwischen zu schalten, aber Lazarus erkennt trotzdem den Kreislauf.
Danke im Voraus,
Weyoun.
Edit:
Ich finde es allgemein nervig, dass man nicht zwei Formulare miteinander so verknüpfen kann, dass man erst über Form1 Form2 öffnet und dann wieder über Form2 Form1. Gibt es da eine Methode, ohne Fehlermeldung?
Mathematiker - Di 12.11.13 21:57
Hallo,
Weyoun hat folgendes geschrieben : |
Ich möchte, dass zwei Formulare miteinander Variablen austauschen können. Also wollte ich die Variable als public deklarieren ... |
Legst Du die Variable bei Form2 fest, kannst Du auch von Form1 zugreifen, wenn die Unit2 in der Uses-Liste bei Form1 steht. Damit gibt es keinen Zirkel-Bezug.
Ob dies allerdings elegant ist, kann man ohne konkreten Quelltext nicht sagen.
Weyoun hat folgendes geschrieben : |
Ich finde es allgemein nervig, dass man nicht zwei Formulare miteinander so verknüpfen kann, dass man erst über Form1 Form2 öffnet und dann wieder über Form2 Form1. Gibt es da eine Methode, ohne Fehlermeldung? |
Du kannst das ja nervig finden, aber nein, so etwas gibt es nicht. Rufst Du Form2 aus Form1 auf, so ist ja das 1.Formular i.A. nicht weg. Solltest Du mit "Öffnen" aber nur das in den Vordergrund bringen meinen, so kommt es auf die Art des Formulars 2 an.
Ist das Formular 2 modal, kannst Du erst wieder auf das 1.Formular zugreifen, wenn das 2. geschlossen ist. Willst Du es dennoch, so musst Du ein nichtmodales Fenster erzeugen.
Beste Grüße
Mathematiker
jaenicke - Di 12.11.13 22:21
Was möchtest du denn erreichen? Normalerweise sieht so etwas so aus:
Formular 1
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var MyForm2: TForm2; begin MyForm2 := TForm2.Create(Self); try MyForm2.Param1 := 'a'; if IsPositiveResult(MyForm2.ShowModal) then begin MyForm2.Result1 ... end; finally MyForm2.Free; end; end; |
Formular 2
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TForm2 = class(TForm) private FParam1: string; FResult1: string; public property Param1: string read FParam1 write SetParam1; property Result1: string read GetResult1; end; |
So kannst du sehr einfach auf die Ergebnisse (Result1, ...) aus deinem zweiten Formular zugreifen und Parameter (Param1, ...) mitgeben. Das zweite Formular arbeitet aber abgeschlossen für sich und muss das erste nicht kennen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!