[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/09/10(Fri) 10:34
投稿者名:TM
Eメール:
URL :
タイトル:
モジュール変数の有効期限
変数が初期化されるタイミングを教えて下さい。
今までローカル変数は、プロシージャが呼ばれる時。
モジュール変数は、Formがロードされる時。
グローバル変数は、プログラム起動時。
と思っていたのですが、
モジュール変数(Private)が
FormをUnloadし、Form1.Showで再表示しても
初期化されず、Unload前の値がそのまま残ってしまいます。
変数がたくさんあるので、Form_Load時に自分で初期化する
のが面倒なのですが、何か方法がありますでしょうか。

投稿時間:2004/09/10(Fri) 12:14
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re: モジュール変数の有効期限
Unloadの時にNothingをセットするとか。

投稿時間:2004/09/10(Fri) 17:24
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^2: モジュール変数の有効期限
> Unloadの時にNothingをセットするとか。

改めて見たら言葉が足りなくて何のことか分かりませんねf^_^;

UnloadするFormにNothingをセットするんです。
次にShowする時には変数は全て初期化されているハズです。

投稿時間:2004/09/10(Fri) 16:18
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: モジュール変数の有効期限
> モジュール変数は、Formがロードされる時。

モジュール変数は、Formがロードされる時ではなくて
Formがイニシャライズされる時です。

ちなみにフォームの開始から終了までのイベントの発生は次のようになります。

Form_Initialize ←変数初期化
Form_Load
Form_Activate
Form_QueryUnload
Form_Unload
Form_Terminate ←変数開放

投稿時間:2004/09/10(Fri) 18:50
投稿者名:TM
Eメール:
URL :
タイトル:
Re: モジュール変数の有効期限
> UnloadするFormにNothingをセットするんです。
> 次にShowする時には変数は全て初期化されているハズです。
>
nanashiさんありがとうございます。
最初の返信で、変数をNothingするなら初期化と手間が変わらないので、
困っておりました。
Set Form1 = Nothing
でできました。ありがとうございます。

LESIAさんのFormをTerminateするやり方は分かりませんでした。

投稿時間:2004/09/19(Sun) 13:04
投稿者名:よねKEN
Eメール:
URL :
タイトル:
Re^2: モジュール変数の有効期限
> > UnloadするFormにNothingをセットするんです。
> > 次にShowする時には変数は全て初期化されているハズです。
> >
> nanashiさんありがとうございます。
> 最初の返信で、変数をNothingするなら初期化と手間が変わらないので、
> 困っておりました。
> Set Form1 = Nothing
> でできました。ありがとうございます。
>
> LESIAさんのFormをTerminateするやり方は分かりませんでした。

いや、その方法が「Set Form1 = Nothing」ですよ。
Form1はクラスであり、また、同名の変数です。
Unloadをしても変数Form1に格納されたForm1クラスのインスタンスは破棄されませんので、
Form1クラスのモジュールレベルの変数はクリアされません。

Set Form1 = Nothingとすることで、明示的にForm1インスタンスを破棄するので、
破棄されるときにForm_Terminateが発生します。

次Form1にアクセスすると再びForm_Initializeが発生します。