1. 程式人生 > >6種方法使MDI父窗體呼叫子窗體(子窗體同時只能顯示一個)

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)