構造体の初期化方法についての質問です。
フォームに、
Private Type KOUZOUTAI
aaa As String
bbb As String
ccc As String
ddd As String
eee As String
End Type
と書いています。
フォームを Unload Me でアンロードしてもういちどフォームを呼びます。
すると、KOUZOUTAIの中身は前の値がそのまま入っています。
フォームをアンロードしたのになぜ変数は初期化されないのでしょうか?
また、初期化する方法はありますか?
※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
変数、およびフォームの有効期間を確認してみてください。
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
勉強になりました。
ありがとうございました。
ツイート | ![]() |