我创建了一个词典:
i
以下是我的模块函数,用于在MDIParent中显示一个表单:
Public DicForms As New Dictionary(Of String, Form)
DicForms.Add("FrmAbout", FrmAbout)
DicForms.Add("FrmAddAcGroup", FrmAddAcGroup)
'..
'..
'upto 71 items
我正在尝试打开字典Public Sub OpenForm(ByVal frm As Form)
With frm
.MdiParent = FrmMain
.Show()
.Focus()
End With
End Sub
中提供的表单:
DicForms
如果表单第一次打开,它会显示。但是当打开相同的表单时,例如当我第一次尝试打开'FormName = "FrmAbout"
If Not formName Is Nothing Then
If DicForms.ContainsKey(formName) Then
Dim fmr As New Form
fmr = DicForms.Item(formName)
OpenForm(DicForms.Item(formName))
End If
End If
时,它会显示但是第二次出现错误:
FrmAbout
到目前为止我做了什么:
Cannot access a disposed object. Object name: 'FrmAbout'
但这并没有像我预期的那样发挥作用:它显示出同样的错误。
答案 0 :(得分:2)
您有两种选择:
一:当你想要显示它时,创建一个新的表单实例。不要创建String, Form
但String, Type
的字典,并且每次都使用Activator.CreateInstance
创建新的实例:
If Not formName Is Nothing Then
If DicForms.ContainsKey(formName) Then
Dim fmrType = DicForms.Item(formName)
Dim frm = Directcast(Activator.CreateInstance(fmrType), Form)
OpenForm(frm)
End If
End If
二:处理表单的结束事件,并隐藏它们而不是关闭它们。通过这种方式,您可以再次显示它们,因为它们不会被处理掉。