Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriff auf Variable anderer Unit (https://www.delphipraxis.net/103864-zugriff-auf-variable-anderer-unit.html)

Christophaa 23. Nov 2007 00:03


Zugriff auf Variable anderer Unit
 
Hallo Leute!

Ich habe gerade ein wahrscheinlich total einfaches Problem, hab aber mit googeln und Forensuche nicht anderes brauchbares gefunden als das was ich denke schon zu tun.

Ich rufe aus Form1 über einen Button Form2 auf und möchte dann in Unit2 auf globale Variablen aus Unit1 zugreifen.

Quelltexte:

Unit1:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
...

var
A:integer;

implementation

uses unit2;

...

Unit2:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, unit1;

type
...
var
B:integer;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  B:=unit1.A;
end;

end.
Leider kommt da für B immer nur null raus, egal was A in Wirklichkeit für einen Wert hat.
Vielen Dank schonmal, Christophaa.

ULIK 23. Nov 2007 05:14

Re: Zugriff auf Variable anderer Unit
 
Wann erstellst Du denn die Instanz von TForm2? Ist denn die Variable A da überhaupt schon gesetzt?

Grüße,
Uli

dominikkv 23. Nov 2007 06:20

Re: Zugriff auf Variable anderer Unit
 
Eine globale Integer-Variable hat immer den Startwert 0.

Sharky 23. Nov 2007 06:53

Re: Zugriff auf Variable anderer Unit
 
Hai Christopfaa,

ersteinmal: Herzlich Willkommen in der Delphi-PRAXiS :hello:

Ich würde es grundsätzlich vermeiden direckt auf die Variablen einer anderen Unit zugreifen zu müssen.
Gönne deiner Form2 lieber ein Property und setze dieses vor dem zeigen der Form. z.B. so:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
    fWert: Integer;
  public
    { Public-Deklarationen }
    property bWert: Integer read fWert write fWert;
  end;


implementation

{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
  Label1.Caption := Format('bWert ist = %d', [fWert]);
  fWert := 7;
end;

end.
Delphi-Quellcode:
unit U_Main;

interface

uses
  Windows, Messages, Classes, Graphics, Controls, Forms, StdCtrls, ComCtrls,
  ExtCtrls, Dialogs;

type
  TDemo_Form = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    aWert: Integer;
  public
    { Public-Deklarationen }
  end;

var
  Demo_Form: TDemo_Form;

implementation

uses Unit2;

{$R *.dfm}

procedure TDemo_Form.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  aWert := 5;
  Form2 := TForm2.Create(self);
  try
    Form2.bWert := aWert;
    Form2.ShowModal;
    aWert := Form2.bWert;
    ShowMessageFmt('Jetzt ist aWert = %d', [aWert]);
  finally
    Form2.Free;
  end;
end;

end.

RavenIV 23. Nov 2007 07:58

Re: Zugriff auf Variable anderer Unit
 
Zitat:

Zitat von Christophaa
Ich rufe aus Form1 über einen Button Form2 auf und möchte dann in Unit2 auf globale Variablen aus Unit1 zugreifen.

Globale Variablen? :shock: :shock: :shock:
Never, never use it!

Wie in einem anderen Beitrag schon erwähnt, ist es besser, eine Member-Variable mit entsprechender Property zu benutzen. Dann weisst Du immer, was gerade passiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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-2025 by Thomas Breitkreuz