構造体の初期化?について

解決


m  2005-08-01 18:49:57  No: 91205  IP: [192.*.*.*]

構造体の初期化方法についての質問です。
フォームに、
Private Type KOUZOUTAI
    aaa As String
    bbb As String
    ccc As String
    ddd As String
    eee As String
End Type
と書いています。
フォームを Unload Me でアンロードしてもういちどフォームを呼びます。
すると、KOUZOUTAIの中身は前の値がそのまま入っています。
フォームをアンロードしたのになぜ変数は初期化されないのでしょうか?
また、初期化する方法はありますか?

編集 削除
ガッ  2005-08-01 20:13:11  No: 91206  IP: [192.*.*.*]

※VB6と仮定します。
当方では再現できませんでしよ?

-Form1.frm-
Option Explicit
Private Type tX
    p As Long
    q As Long
End Type
Dim u As tX
Private Sub Form_Load()
    With u
        .p = Rnd * 100
        .q = Rnd * 100
        Debug.Print .p, .q
    End With
End Sub

Module1.bas-
Sub main()
    Dim i As Form1
    Set i = New Form1
    i.Show vbModal
    Set i = New Form1
    i.Show vbModal
End Sub

編集 削除
魔界の仮面弁士  2005-08-01 20:49:55  No: 91207  IP: [192.*.*.*]

変数、およびフォームの有効期間を確認してみてください。
http://www.microsoft.com/japan/developer/library/VBCon98/vbconlifecycleofvisualbasicforms.htm


ユーザー定義型に限った話では無いので、単なる String型で実験。

'--- Form1 ---
Option Explicit
Private Sub Command1_Click()
    MsgBox "Form2に日時を表示", vbInformation
    Form2.Foo = Format(Now(), "hh:nn:ss")
    Form2.Show vbModal

    MsgBox "Form2を継続利用", vbInformation
    Form2.Show vbModal

    MsgBox "Form2を破棄", vbInformation
    Set Form2 = Nothing
    Form2.Show vbModal
End Sub


'--- Form2 ---
Option Explicit
Public Foo As String
Private Sub Form_Load()
    Text1.Text = Foo
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Foo = Text1.Text
    MsgBox "Unloadされました"
End Sub

編集 削除
m  2005-08-02 09:42:39  No: 91208  IP: [192.*.*.*]

勉強になりました。
ありがとうございました。

編集 削除