我有一个类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
与具有上述 datagridview 的表单无关。根据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 中处理对象/资源?