違うフォームで変数を使うには

解決


きのこのこ  2003-12-12 08:33:05  No: 6123  IP: [192.*.*.*]

質問いたします。
フォームを二つ準備するとして、
一つ目のフォームに整数型の変数iを準備したとします。
で、一つ目のフォーム上でiの変数を変更可能とします。
まぁ、例えばiを1にしたり、2にしたり…。

で、二つ目のフォームでcase文を用いたいのですが、
そのときに
case i of
    1:  ...
    2:  ...
    3:  ...

のようなことをしたいのですが、勿論iは一つ目のフォーム上で宣言されたものなのでうまくいきません。
何か良い方法はあるでしょうか?

編集    削除
吉岡  2003-12-12 09:45:38  No: 6124  IP: [192.*.*.*]

まず、1つめのフォームで以下のように変数宣言します。

type
  TForm1 = class(TForm)
    ....................................
    ....................................
  private
    { Private 宣言 }
  public
    { Public 宣言 }
    i : Integer;  // ←ここで宣言する
  end;

次に参照したい別フォームでファイルメニューからユニットを使うを選択し、上のフォームのユニットを選択します。
そうするとフォーム2のソースに以下のコードが挿入されます。
もちろん手入力で書いてもOKです。

var
  Form2: TForm2;

implementation

uses Form1;  // ←ここが追加される

フォーム2からは

 Form1.i := 0;

のような記述で値を操作することができます。
基本はpublicで宣言すると外部から参照が可能になるということです。

編集    削除
Halbow  2003-12-12 09:50:29  No: 6125  IP: [192.*.*.*]

Halbow です。

Unit2 の implementation の下に uses Unit1; を加えて

[ i が Unit1 でグローバル変数の場合 ]

i := Unit1.i;

case i of
    1:  ...
    2:  ...
    3:  ...

[ i が Unit1 で Form1 のフィールド変数の場合 ]

i := Form1.i;

case i of
    1:  ...
    2:  ...
    3:  ...

とするとよいのでは。

編集    削除
吉岡  2003-12-12 10:04:16  No: 6126  IP: [192.*.*.*]

>きのこのこさん

一部訂正します(汗

uses Form1;  // ←ここが追加される

じゃなくて

uses Unit1;  // ←ここが追加される

ですね。失礼しました。
IDEを使わないで書いたので凡ミスです(汗)。


>Halbowさま

今朝はありがとうございました。
なるほど。そういう書き方も出来るんですか?

編集    削除
きのこのこ  2003-12-12 11:22:15  No: 6127  IP: [192.*.*.*]

吉岡さん、Halbowさん、ご教授ありがとうございました。
上手くできました。
これでまた一つDelphiにおいて賢くなりました。
ありがとうございました。

編集    削除