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

投稿時間:2005/09/26(Mon) 22:42
投稿者名:ジム
Eメール:
URL :
タイトル:
Visibleを参照すると Loadイベントが発生する
VB6で作成していますが、
Form2という空のフォームを作成し
Form2.Visible を参照すると Loadイベントが発生してしまいます。
Loadイベントを発生させないで、オブジェクトが表示・非表示かを
調べるためにはどうすればよいでしょうか?ハンドルの取得とかも
試してみましたが駄目でした。どなたか知っていれば教えて下さい。

投稿時間:2005/09/26(Mon) 23:19
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: Visibleを参照すると Loadイベントが発生する
Forms コレクション で調べる事ができますが。

hhttp://www.bcap.co.jp/hanafusa/VBHLP/Fil_AllEnd.htm

投稿時間:2005/09/27(Tue) 00:22
投稿者名:ジム
Eメール:
URL :
タイトル:
Re^2: Visibleを参照すると Loadイベントが発生する
> Forms コレクション で調べる事ができますが。
>
> hhttp://www.bcap.co.jp/hanafusa/VBHLP/Fil_AllEnd.htm

投稿時間:2005/09/27(Tue) 00:23
投稿者名:ジム
Eメール:
URL :
タイトル:
Re^3: Visibleを参照すると Loadイベントが発生する
> > Forms コレクション で調べる事ができますが。
> >
> > hhttp://www.bcap.co.jp/hanafusa/VBHLP/Fil_AllEnd.htm
Forms コレクションといのがあるのですね。ありがとうございました。
解決しました。

投稿時間:2005/09/27(Tue) 09:27
投稿者名:じゃんぬねっと
Eメール:
URL :http://jeanne.wankuma.com/
タイトル:
Re: Visibleを参照すると Loadイベントが発生する
こんにちは、じゃんぬ です。

> Form2.Visible を参照すると Loadイベントが発生してしまいます。

誤解がないように補足しますが、Form2 内のメンバのいずれかを参照するとロードされます。
Visible プロパティに限った話ではなく、Form 内のコントロールなどすべてです。
これは、暗黙的にインスタンスを生成するからです。

> Loadイベントを発生させないで、オブジェクトが表示・非表示かを
> 調べるためにはどうすればよいでしょうか?

単純に Load イベントにフラグでガード句を設けるという、
短絡的な考えすら思いつきませんでしたか?

投稿時間:2005/09/27(Tue) 11:04
投稿者名:ジム
Eメール:
URL :
タイトル:
Re^2: Visibleを参照すると Loadイベントが発生する
> こんにちは、じゃんぬ です。
>
> > Form2.Visible を参照すると Loadイベントが発生してしまいます。
>
> 誤解がないように補足しますが、Form2 内のメンバのいずれかを参照するとロードされます。
> Visible プロパティに限った話ではなく、Form 内のコントロールなどすべてです。
> これは、暗黙的にインスタンスを生成するからです。
>
> > Loadイベントを発生させないで、オブジェクトが表示・非表示かを
> > 調べるためにはどうすればよいでしょうか?
>
> 単純に Load イベントにフラグでガード句を設けるという、
> 短絡的な考えすら思いつきませんでしたか?
回答ありがとうございます。Load イベントでおこなっている処理を追い出して、別途呼び出す
という方法は選択肢としてあったのですが、なんでわざわざそんなことをせんといかんのやろ
と思いました。でも解決できました。

投稿時間:2005/09/27(Tue) 11:30
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^2: Visibleを参照すると Loadイベントが発生する
> > Form2.Visible を参照すると Loadイベントが発生してしまいます。
>
> 誤解がないように補足しますが、Form2 内のメンバのいずれかを参照するとロードされます。
> Visible プロパティに限った話ではなく、Form 内のコントロールなどすべてです。
> これは、暗黙的にインスタンスを生成するからです。
>
Form2内のメンバと言うのはFormが元々持っているプロパティ、メソッドのことでよろしいんですよね。
(自分で追加した関数、変数、プロパティは範囲外)
Formが元々持っているプロパティ、メソッドにアクセスすると暗黙的にインスタンスを生成というより
暗黙的にロードしているのでは無いでしょうか。(ロード必要時にインスタンスが無い為生成。)
因みに自分が作成した物にアクセスすると(暗黙的に)インスタンスのみ作成します。(ロードしない)
※インスタンスが生成されたからといって必ずロードされるわけではない。

'Form1
Private Sub Command1_Click()
    Form2.test
    'Debug.Print Form2.hoge
    'Debug.Print Form2.Visible
End Sub

'Form2
Private Sub Form_Initialize()
    Debug.Print "Initialize"
End Sub

Private Sub Form_Load()
    Debug.Print "Load"
End Sub

Public Sub test()
    Debug.Print "Test"
End Sub

Public Property Get hoge() As Long
    hoge = 1
End Property

----追加(2005/09/27 11:41)
「Formが元々持っている」は「コントロールが元々持っている」と読み替えてください。

投稿時間:2005/09/27(Tue) 16:31
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
追加情報
このあたりも読んでおくと良いかも、という事で参考リンク。


[MSDNライブラリ] - [Visual Basic フォームの有効期間]
hhttp://www.microsoft.com/japan/developer/library/VBCon98/vbconlifecycleofvisualbasicforms.htm

[プログラマのメモ帳] - [プログラムが終了しない理由] - [フォームについて]
hhttp://web.archive.org/web/20040114104001/www.gj.il24.net/~nakasima/vb/tech/end/index.htm

[プログラマのメモ帳] - [TIPS] - [暗黙に作成されるフォームを(しか)使用できなくする]
hhttp://web.archive.org/web/20030817111219/http://www.gj.il24.net/~nakasima/vb/tips/index.htm#VBTIPS16

# 中嶋さんのサイトが閉鎖してしまったので、archive.org のログを貼ってあります。