変数を他のUnitで使用するには?

解決


かんとく  2009-04-16 23:28:56  No: 34020

XP,Delphi2007です。
Delphiは初心者です。

変数の宣言で困っています。
Unit1で宣言したPublic変数を、Unit2でも使いたいのです。

Unit1で、typeのあとの
  public
    { Public declarations }
のあとに、
a:string;
を宣言し、Unit2でaを参照しようとしましたが、出来ませんでした。

VBでのPublic変数のような使い方をするには、どうすればよいのでしょうか?

よろしくお願いします。


VBってべりーばっどだっけ?  2009-04-16 23:50:45  No: 34021

type
  TForm1 = class(TForm)
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;
  a: String;    //ここ


かんとく  2009-04-17 00:19:02  No: 34022

ありがとうございます。

var
  Form1: TForm1;
の下で
  a: String;
と宣言したら、Unit2から参照できました。

○もう一つ質問したいのですが、
  public
    { Public 宣言 }
の真下で
  a: String;
と宣言した場合、aはどの範囲(Unit1だけなのか、Unit2でも参照可能か)で、どういう方法(普通にa:=a+1;で可能か)で参照するのでしょうか。

私もVBしか使えないのはとてもよくないことだと思い、最近Delphiをはじめました。
よろしくお願いします。


かんとく  2009-04-17 00:22:57  No: 34023

すみません。

上の例は、
 a: String;
なので、
「a:=a+1;で可能か」

というのではなく、
「a:='abc';で可能か」

でよろしくお願いします。


VBでも  2009-04-17 00:30:55  No: 34024

VBでもクラスのPublic変数を他からアクセスするには
そのクラス参照を指定する必要があるんじゃないの?
別のユニットのクラスのメンバーであれば、そのクラス参照をしなきゃね。
変数aがUnit1のForm1クラスのメンバー変数なら、Form1.a


かんとく  2009-04-17 00:39:55  No: 34025

すみません。

おっしゃるとおりです。

Form1.a
とするべきでした。

○もう一つ質問が出来たんですが、
  public
    { Public 宣言 }
の真下で
  a: String;
と宣言するのは、どんな場合なのでしょうか。

var
  Form1: TForm1;
の下で
  a: String;
と宣言しても、Unit2から参照できるので、
    { Public 宣言 }
の真下で宣言する場合がどんな場合なのか、分かりません。

何度もすみません。
よろしくお願いします。


グローバル変数は専用ユニットに  2009-04-17 01:29:48  No: 34026

クラスのメンバーとして変数を宣言すれば、その変数の
宣言場所、所属がはっきりする。
そうでないグローバル変数は、どこで宣言してるのか分かりにくいし、
同じ変数を複数のユニットで宣言してしまうミスも起こり得るので、
バグの元になりやすい。
どうしてもグローバル変数を使いたければ、グローバル変数専用の
ユニット Global.pasを作って、そこにグローバル変数を集めておけば、
宣言場所がはっきりするし、重複定義のミスも防げる。


かんとく  2009-04-17 03:46:02  No: 34027

ありがとうございます。

グローバル変数専用のユニットを作ります。

とても助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加