【发布时间】:2011-11-09 08:00:37
【问题描述】:
我有一个类 clsContextPopUpMenu 来创建一个 ContextMenuStrip,其中包含一些可以在不同控件中使用的基本功能(例如复制)。
Friend Sub New(ByRef objControl As System.Windows.Forms.Control)
m_objControlContainer = objControl
m_mnuCopyCell2Clipboard = New ToolStripMenuItem("Copy Cell")
m_PopupMenu = New ContextMenuStrip
m_PopupMenu.Items.AddRange(New ToolStripMenuItem() {m_mnuCopyCell2Clipboard})
End Sub
例如,我可以在 DataGridView 中使用它DGVTable:
Private m_objPopUpMenu As clsContextPopUpMenu
m_objPopUpMenu = New clsContextPopUpMenu(CType(DGVTable, System.Windows.Forms.Control))
但是,请注意m_objPopUpMenu 与具有上述数据网格视图的表单无关。根据MSDN 中的ContextMenuStrip 构造函数解释,我认为m_objPopUpMenu 不能自动处理,因为它不是表单的子项。
我的问题是,我是否必须在设计器中明确处置 m_objPopUpMenu:
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
**m_objPopUpMenu.Dispose()**
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
一个更广泛的问题是,我应该什么时候自己处置对象/资源?当然,gc 收集器并不是释放所有可用内存的魔术师。如上所示,我是否可以始终在 Dispose Sub 中处理对象/资源?
【问题讨论】: