Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Zugriff auf variablen in einer andern form, execption?


Alice - Mi 11.07.12 12:06
Titel: Zugriff auf variablen in einer andern form, execption?
hi,

ich versuche hier von formA eine formB zur laufzeit zu erstellen.

dies nun greift auf variablen der formA zu.

das klappt auch, genau *einmal.
dann gibt es eine exception beim zweiten verusch!?

woran könnte das liegen?

hier create formB

Delphi-Quelltext
1:
2:
3:
4:
  Application.CreateForm(Tumsdiagramm, umsdiagramm);
  umsdiagramm.ShowModal;
  umsdiagramm.free;
  umsdiagramm := nil;

und hier zugriff auf variablen der formA

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    j2002:= unit1.Form1.j2002;
    j2003:= unit1.Form1.j2003;
    j2004:= unit1.Form1.j2004;
    j2005:= unit1.Form1.j2005;
    j2006:= unit1.Form1.j2006;
    j2007:= unit1.Form1.j2007;
    j2008:= unit1.Form1.j2008;
    j2009:= unit1.Form1.j2009;
    j2010:= unit1.Form1.j2010;
    j2011:= unit1.Form1.j2011;
    j2012:= unit1.Form1.j2012;

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mi 11.07.2012 um 14:08


jaenicke - Mi 11.07.12 12:12

Das ist eine sehr schlechte Idee, da du so die Formulare direkt voneinander abhängig machst und zudem auf die globale Formularvariable angewiesen bist. Übergebe die Werte besser vor dem Aufruf der zweiten Form an diese. ;-)
So also z.B.:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
// erstes Formular
var
  SettingsForm: TfrmSettingsForm;
begin
  SettingsForm := TfrmSettingsForm.Create(nil);
  try
    SettingsForm.Settings := TAppSettings.Instance;
    SettingsForm.ShowModal;
  finally
    SettingsForm.Free;
  end;

// zweites Formular:
property Settings: TAppSettings read FSettings write FSettings;
Auf die Weise muss das zweite Formular das erste nicht kennen und bekommt einfach dessen Werte. Umgekehrt kann das erste Formular diese nach der Anzeige natürlich auch wieder auslesen.