機房重構——父窗體、子窗體的顯示
阿新 • • 發佈:2019-02-01
第一次機房重構的時候就遇到這個問題,這是VB6.0時寫的方法 機房收費系統—MDI窗體與子窗體
在機房重構的時候是用的VB.NET寫的,其實還是可以利用原先的程式碼的。只是不能再用PictureBox控制元件了,因為它不是容器,在它上面放置的控制元件就會在子窗體上面出現。
●所以接下來就選擇用另一個容器Panel
在模組中寫上如下程式碼:
在需要的地方寫上:Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Integer, ByVal hWndNewParent As Integer) As Integer
Private Sub 學生資訊ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 學生資訊ToolStripMenuItem.Click
SetParent(frmStudent.Handle, Panel1.Handle) '以Panel為父窗體,FrmStudent為子窗體
frmStudent.Show()
End Sub
這樣就OK了
●上面的方法沒有用單例模式,但是同時達到了單例模式的效果,如果用單例模式的話,
Private Sub 學生資訊ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 學生資訊ToolStripMenuItem.Click 'SetParent(frmStudent.Handle, Panel1.Handle) '沒有用單例模式 'frmStudent.Show() Dim from As frmStudent = frmStudent.GetInstance() '用了單例模式 from.Show() SetParent(from.Handle, Panel1.Handle) End Sub
MDI——單例模式Public Class frmStudent Private Shared mdfstudent As frmStudent = Nothing Private Sub New() ' 此呼叫是設計器所必需的。 InitializeComponent() ' 在 InitializeComponent() 呼叫之後新增任何初始化。 End Sub Public Shared Function GetInstance() As frmStudent If mdfstudent Is Nothing OrElse mdfstudent.IsDisposed Then mdfstudent = New frmStudent End If Return mdfstudent End Function End class
用了單例模式感覺反而沒有用單例模式來的簡單,以後還是要繼續研究單例模式。
●其實還有另一種方法也可以,不用任何控制元件,直接把frmMain窗體設定為父窗體就可以了,上面可以新增PictureBox控制元件來設定介面。
●在.NET中,還可以直接把FrmMain的BackgroundImage屬性中插入一張圖片。
【總結】
其實要達到一種效果有很多種的方法。