-PR-
解決済み

モジュールレベルで宣言した変数の値について

  • 暇なときにでも
  • 質問No.8045
  • 閲覧数973
  • ありがとう数10
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 72% (8/11)

WinNT4SP6 & VB6のSP4の環境です。
例えばfrmUserIDというフォームがあり、このフォームだけで有効なモジュールレベルの変数を、次のように宣言します。
Private sPassword As String

他のフォームから、このfrmUserIDフォームを開き、このfrmUserIDの中で値を設定したとします。
sPassword = "SHOW1234"

Unload MeでfrmUserIDフォームを閉じて、元のフォームに戻ります。

もう一度、他のフォームからfrmUserIDフォームを開いた場合、sPasswordという変数には、先程設定した値がそのまま残っています。

私は、フォームのUnloadと共に、モジュールレベルの変数もメモリから開放されるものと考えていましたが、こういうものなんでしょうか?
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.5
レベル11

ベストアンサー率 50% (173/345)

はい。そういうものなのです。

フォームのインスタンスを完全に解放しない限りメモリから解放されません。

従って、対策は、以下の2つの方法があります。

1)FormのUnloadイベントに
Set 自フォーム名 = Nothing
と、記述し、インスタンスを解放する。

2)FormのLoadイベントで各変数を初期化する。
お礼コメント
showcase

お礼率 72% (8/11)

変数の初期化をサボったことが間違いの元でした。
FormのUnloadイベントでインスタンスを解放する方が、1行で済むので楽ですね。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00

その他の回答 (全4件)

  • 回答No.1

VBのことはあまり分かりませんが、フォームの
変数ってstaticではなかったですか?

staticならば、プログラムが終了するまで変数の
値は保持されるのでクリアしたければ、明示的に
クリアしなければなりませんよ。

とりあえずお調べください。
ではでは☆
お礼コメント
showcase

お礼率 72% (8/11)

staticがどういうことなのか解りませんが、変数の初期化をサボっちゃいけませんね。プログラムの基本でした。
ありがとうございます。
投稿日時 - 0000-00-00 00:00:00


  • 回答No.2
レベル9

ベストアンサー率 19% (15/78)

よくわかりませんが
1つのセッション内では変数はクリアされないとか。
VBにセッションとかあるか分からないけど。。。
お礼コメント
showcase

お礼率 72% (8/11)

プロシージャレベルの変数が初期化されているので、モジュールレベルの変数もそうかな?という思い込みがありました。やはり変数は、明示的に初期化するのが、まっとうなプログラムですね。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00
  • 回答No.3
レベル9

ベストアンサー率 56% (45/80)

フォームは明示的にメモリから解放しなければ変数の値などが残ってしまうものだったと思います。
フォームを明示的にメモリから解放するには
Set フォーム名 = Nothing
と記述します。

きちんと確認してないので、チョンボの可能性もあります・・・
お礼コメント
showcase

お礼率 72% (8/11)

きちんと確認できました。
フォームのアンロードで、そのフォームに関わるすべてがメモリから解放されるという誤解をしていました。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00
  • 回答No.4
レベル13

ベストアンサー率 46% (643/1383)

「こういうもの」なのでしょう。

VB5のヘルプのUnLoadの項目によれば、

メモ フォームをメモリからアンロードするときには、表示されている構成要素だけがアンロードされ、そのフォーム モジュールのコードはメモリに保持されます。

だそうです。恐らく、変数内容も同様に保持されるのでしょう。
お礼コメント
showcase

お礼率 72% (8/11)

そのようですね。
フォームのアンロードで、すべてが解放されると思い込んでいました。
変数は明示的に初期化するか、フォームを明示的にメモリから解放するのがよさそうです。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


抽選で合計100名様にプレゼント!

ピックアップ

ページ先頭へ