「Unload」ステートメントは、なぜメソッドとして実装されていないのか?

解決


CF  2011-01-15 12:48:19  No: 102763  IP: [192.*.*.*]

(VB6,WINXP)

ふと思ったのですが
「Unload」ステートメントは、なぜメソッドとして実装されていないのでしょうか?
フォームをアンロードさせるとき、「Unload Form1」と書きますが、なぜ、「Form1.Unload」となるように作られていないのでしょうか?

こっちの方がわかりやすいと思うのですが。

どうかよろしくお願いいたします。

編集 削除
ふるふる  2011-02-01 15:24:54  No: 102764  IP: [192.*.*.*]

Load, Unload ステートメントは対になっていますが、Formに限らず、コントロールにも使えるものです。
メソッドとして利用するには、そのオブジェクトがメモリ上に展開されている必要がありますが、その展開すなわちオブジェクトをロードするための命令がLoad ステートメントですから、メソッドとして作る、というのはおかしい話です。
Load object
に対し
Unload object
があり、
Object.Open 
に対し
Object.Close
がある、という風に考えていいかと思います。

編集 削除
CF  2011-02-05 08:24:35  No: 102765  IP: [192.*.*.*]

ありがとうございます。

> メソッドとして利用するには、そのオブジェクトがメモリ上に展開されている必要があります
なるほど、考えてみるとそうですね。
まだ存在していないオブジェクトに対してメソッドも何も無いですね。
とてもよく理解できました。
どうもありがとうございました。

編集 削除
GOD  2011-02-07 10:02:06  No: 102766  IP: [192.*.*.*]

>「Unload」ステートメントは、なぜメソッドとして実装されていないのか?
>
真相はMSの開発者じゃないと分からない。

展開=オブジェクトのロードとなっているがそれは違うと思う。
実際にNewすればメソッドも呼べるようになる。
メソッド内でコントロールにアクセスするようなことを行えばその時点で勝
手にロードされてしまう。

'Form1側
Option Explicit

Private Sub Command1_Click()
    Dim x As Form2
    
    Set x = New Form2
    x.Test
    Set x = Nothing
End Sub

'---------------------------------------------------------
'Form2側
Option Explicit

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

Public Sub Test()
    Dim frm As Form
    For Each frm In Forms
        Debug.Print frm.Name
    Next
End Sub

編集 削除
GOD  2011-02-07 10:20:49  No: 102767  IP: [192.*.*.*]

> 展開=オブジェクトのロード
>
「オブジェクトのロード」に関しては意味が広くなりすぎるが適当に脳内
変換して読んでください。

一つ補足しておくと「メソッド内でコントロールにアクセスするようなこ
とを行えばその時点で勝手にロードされてしまう。」と書いたがこれはフォ
ームにも適用されている。
Form1 内で「Debug.Print Form2.Top」みたいにされた場合、勝手にロード
される。(MS側で用意されているプロパティ、メソッドは全てロード対象に
なるみたい。)
上記のことを踏まえて仮にForm.Loadみたいな書き方をされた場合、Load内
に何も実装しないでも勝手にロードされてしまうから敢えてそのようなメソ
ッドは用意されていないんじゃないかというのが推論。
Unload 側については「自分で自分を消すというのができないのか」、「そも
そも発想がおかしいので実装していないのか」はわかりません。

編集 削除
CF  2011-02-09 20:01:51  No: 102768  IP: [192.*.*.*]

なるほど、そういう考え方もあるのですね。
いろいろと勉強になりました。
どうもありがとうございました。

編集 削除