Zitat von
Bernhard Geyer:
Ich vermute mal das die
Unit-Globale-Formular-Variable verwendest. Und die sollte man tunlichst vermeiden. Ist nur für die automatische Formularerstellung von Delphi relevant und sollte sonst ignoriert werden.
Wie sollte man sonst auf das Form zugreifen wenn nicht über diese Variable??
Jetzt noch nen Code-Beispiel:
MDIForm -> Click auf Button soll MDIChild (form2) erzeugen...
MDIChild -> OnCreate ruft DataModul.DoSomething auf welche auf form2 zugreift. geht aber nicht weil form2 nil ist.
Delphi-Quellcode:
unit MDIForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
MDIChild;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
end;
end.
Delphi-Quellcode:
unit MDIChild;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tform2 =
class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
form2: Tform2;
implementation
{$R *.dfm}
uses
DataModul;
procedure Tform2.FormCreate(Sender: TObject);
begin
dataMod.DoSomething;
end;
end.
Delphi-Quellcode:
unit DataModul;
interface
uses
SysUtils, Classes;
type
TDataMod =
class(TDataModule)
private
{ Private-Deklarationen }
public
procedure DoSomething;
{ Public-Deklarationen }
end;
var
DataMod: TDataMod;
implementation
{$R *.dfm}
uses
MDIChild;
procedure TDataMod.DoSomething;
begin
//This doesn't work because form2 is nil
form2.Label1.Caption := '
HUHU';
end;
end.