6种方法使MDI父窗体调用子窗体(子窗体同时只能显示一个)
有一个MDI窗体叫MainForm,多个子窗体,如Form1,Form2…… 要使子窗体同时只能显示一个,
那么 方法1 dim Form1 as new form1 Form1.showDialog() 此方法一个MDI窗体同时只能显示一个,
方法2 在每一个子窗体的应用单态设计模式 在每一个子窗体上声明 private sub new() end sub Public Shared NewMe…… MDI窗体调用时 dim form1
as form1=form1.NewME form1.show() 这种方法每一个子窗体都要应用单态,代码重复多,不好
方法3 是方法2的改良 先写
一个ChildForm继承Form 在窗体上声明 private sub new() end sub Public Shared NewMe…… 再把所有的子窗体继承它
MDI窗体调用时 dim form1 as form1=form1.NewME form1.show() 这种方法很好,代码也少
方法4 利用MDI窗体的Controls属性 循环检测当是否以存在所需子窗体 存在则 .show .Activate 不存在则new了再.show
方法5 在MDI窗体上
Dim Form1 as form1
Friend Sub ShowForm1()
If Form1 Is Nothing OrElse Form1.IsDisposed Then
Form1 = New Form1
Form1.MdiParent = Me
End If
Form1.Show()
Form1.Activate()
End Sub
这种方法的缺点,每一个子窗体都要写一个这样的方法
方法6 利用泛型改良方法5 先写一个
ChildFormManager类 '''
<summary>
'' 调用子窗口 '''
</summary> '''
<typeparam name="T"></typeparam> ''' <remarks></remarks>
Public Class ChildFormManager(Of T As {Form, New})
Public Shared Sub show(ByVal myform As T, ByVal Mdi As Form)
If myform Is Nothing OrElse myform.IsDisposed Then
myform = New T
myform.MdiParent = Mdi
End If
myform.Show()
myform.Activate()
End Sub End Class
在MDI窗体中这样调用 dim Form1 as Form1 form1=ChildFormManager(of Form1).show(form1,Me)