|
こちらのモーグ様のサイトを参照しながら、
クラスモジュールの使い方を勉強しています。
http://www.moug.net/skillup/opm/opm08-01.htm
自作のクラスからサブクラス(言い方あってます?)を
作成するように作ったのですが、動作は正常にできました。
終了するときに本当にクラスモジュールが解放されているか
確認する方法があれば教えてください。
Cont_Collクラスが、Coll_Eventを作成
Cont_Collが開放されるときに、作成されたColl_Eventも開放したいです。
UserForm1にCommandButtonを3つ、Labelを1つ作成
UserForm1モジュール
'---------
Private MyColl As New Cont_Coll
Private Sub Label1_Click()
MyColl.Con_Item(1).Caption = "テスト"
End Sub
Private Sub UserForm_Initialize()
Dim obj As MSForms.Control
For Each obj In Me.Controls
If TypeName(obj) = "CommandButton" Then
MyColl.Con_Add = obj
End If
Next obj
End Sub
Private Sub UserForm_Terminate()
Set MyColl = Nothing
End Sub
'------------
クラスモジュール"Cont_Coll"
'-----------
'Class名 Cont_Coll
'Control Collectionの意
Private m_Coll As New Collection 'Cont_Coll内部のコレクション
Private m_Item(3) As New Coll_Event 'サブクラスの要素数も指定
'コレクションへ追加するプロパティ
Public Property Let Con_Add(ByVal NewCont As MSForms.Control)
m_Coll.Add Item:=NewCont
Set m_Item(m_Coll.Count) = New Coll_Event
m_Item(m_Coll.Count).ContItem = NewCont
End Property
'コレクションをカウントするプロパティ
Public Property Get Con_Count()
Con_Count = m_Coll.Count
End Property
'コレクションItemを参照するプロパティ
Public Property Get Con_Item(ByRef m_Index As Integer)
Set Con_Item = m_Coll(m_Index)
End Property
'Cont_Collが終了するときにColl_Eventで定義したm_Itemを全て開放したい
'ここが自信ありません。
Private Sub Class_Terminate()
Dim i As Integer
For i = 1 To m_Coll.Count
Set m_Item(i) = Nothing
Next i
End Sub
'----------
クラスモジュール"Coll_Event"
'----------
'Class名 Coll_Event
'Collction Eventの意
Private WithEvents Cont_obj As MSForms.CommandButton
Public Property Let ContItem(ByVal NewCont As MSForms.CommandButton)
Set Cont_obj = NewCont
End Property
'ここからEvent処理を書く
Private Sub Cont_obj_Click()
MsgBox "クラスモジュールのイベント" & vbCr & Cont_obj.Caption
End Sub
'-------------
|
|