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

解決


m  2005-08-02 03:49:57  No: 91205

構造体の初期化方法についての質問です。
フォームに、
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-02 05:13:11  No: 91206

※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-02 05:49:55  No: 91207

変数、およびフォームの有効期間を確認してみてください。
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 18:42:39  No: 91208

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加