Autor Beitrag
Weyoun
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 12.11.13 21:16 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 12.11.13 21:57 
Hallo,
user profile iconWeyoun hat folgendes geschrieben Zum zitierten Posting springen:
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.
user profile iconWeyoun hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19322
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.11.13 22:21 
Was möchtest du denn erreichen? Normalerweise sieht so etwas so aus:
ausblenden 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;
ausblenden 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.