ログイン
ユーザID または e-mail:

パスワード:

IDとパスワードを記憶

パスワード紛失

新規登録
メニュー
カレンダー
2003年 8月
« 7月   9月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
月別過去ログ
カテゴリ一覧
日記のみのRSS
RSSに登録
Subscribe RSS

Subscribe with livedoor Reader

はてなRSSに追加
プロフィール

2003年8月20日(水曜日)

フォームはグローバル変数

カテゴリー: - A-tak @ 22時29分53秒 閲覧数 5 回 コメント (0) このエントリーを含むはてなブックマーク

VB6の落とし穴ですね。
フォームをインスタンス化せずに使うとややこしい事態にはまる場合があります。

VB6の場合、フォームをインスタンス化せずとも呼び出すことが出来ます。
Form1.Show
みたいな感じです。
.NETだと
Dim frm as New Form1
frm.Show
というようにNewでインスタンスを作成して操作する形になります。

このVB特有のForm1.Showとい書き方はフォームと同じ名前で暗黙的にグローバルな変数が勝手に作られている為に可能となっています。
ここで、勘違いしやすいのが、Unload命令です。
Unloadするとフォームのメモリはすべて消えてしまうと思われがちですが、全然違います。
Unloadはフォームの一覧を管理しているFormsコレクションから指定したフォームを削除するという意味で、フォームのインスタンスを破棄するということとは全く別の意味です。

ですから、仮にForm1にPrivateな変数がある場合で、Form1.Showという書き方でフォームを呼び出した場合、UnloadでForm1の内容がすべてクリアされると勘違いしていると、次に同じようにForm1.Showで開いてPrivate変数を見た時に、前回の値が保持されたままなので面食らうはずです。

こうならないための対策としては
A.フォームはすべてインスタンス化して使用する
B.Private変数を初期化するルーチンを必ず用意して、必ずそれを実行するようにする。
C.フォームを閉じる際に暗黙的グローバル変数をNothingする
などが考えられます。

A.は
Dim frm as Form1
Set frm = New Form1
frm.Show
という感じで必ず呼び出すということです。
これが一番確実です。暗黙的なオブジェクトなんて使わない方が間違いが少なくて良いでしょう。

B.はフォームに初期化関数を用意するということですが、忘れたりさぼったりするのは目に見えるので、あまり意味がないかもしれません。

C.はFormをUnloadする所などで
Set Form1 = Nothing
などとするということです。暗黙的なグローバル変数を一度クリアしてしまうわけです。
でも、やっぱり忘れるでしょうね。

一応、いろんなパターンを考えましたが、インスタンス化して使用するA.が一番良いようです。
今まで、インスタンス化して使用した方が良いというのは聞いてはいましたが、今日罠にはまって理由が分かりました(#^.^#)


この記事は良かったですか?(探していた情報、面白い) 投票すると結果がここに表示されます

この記事を読んだ人には、こんな記事もおすすめです

  • 関連する記事はありません

  • もっと他の記事を読む:

    コメント

    このコメントのRSS

    この投稿には、まだコメントが付いていません

    コメントの投稿

    スパム対策のため、2文字以上の連続した平仮名かカタカナがコメント内に必要です
    コメントは、すぐに表示されない場合があります
    以下のHTMLタグが使用可能です。
    <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <br> <code> <em> <i> <strike> <strong>


    テクノラティプロフィール

    31 queries. 0.280 sec.
    Powered by WordPress Module based on WordPress ME & WordPress

    さがしもの
     
    現在、
     1531 の記事と
     1288 のコメントがあります
    このブログの自己満足度
     237 %です
    最近の投稿
    最近のコメント
    人気エントリー
    アクセス数が多いエントリー
    このページのリンク元
    参照なし
    さがしモノ