在具有多个多用途子窗体的MDI WinForms环境中,每个人都说,在同一时间内仅打开这些窗体的一个实例的简单方法是为此使用Singleton实现。经过一些搜索,我发现了这种方法(VB .NET 语言):
Public Class FormSingleton(Of TForm As {Form, New})
Private Shared _instance As TForm
Public Shared ReadOnly Property Form() As TForm
Get
If _instance Is Nothing OrElse _instance.IsDisposed Then
_instance = New TForm
End If
Return _instance
End Get
End Property
Public Shared Sub Show()
'Ensure the form is visible and has focus.
With Form
.Show()
.Activate()
End With
End Sub
End Class
当然,显示表单的代码将是:
FormSingleton(Of MyForm).Show()
现在我的问题是如何在实际显示表单之前将一些信息发送到"单例"表单。必须发送的信息类型因形式而异。
感谢
你可以添加到
你的类FormSingleton
一个方法,例如...
Public Shared Sub AddFacts(ByVal fact_object As Object)
With Form
.AddFacts(fact_object)
End With
End Sub
,然后向每个表单添加合适的AddFacts
。可能值得研究一下让窗体实现接口,并将 AddFacts、Show 和 Activate 方法作为该接口的一部分。这样,您可以确保在编译时表单适合在单例中使用。