6種方法使MDI父窗體呼叫子窗體(子窗體同時只能顯示一個)
阿新 • • 發佈:2019-02-11
有一個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)