1. 程式人生 > >機房重構——父窗體、子窗體的顯示

機房重構——父窗體、子窗體的顯示

第一次機房重構的時候就遇到這個問題,這是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

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
MDI——單例模式

用了單例模式感覺反而沒有用單例模式來的簡單,以後還是要繼續研究單例模式。

其實還有另一種方法也可以,不用任何控制元件,直接把frmMain窗體設定為父窗體就可以了,上面可以新增PictureBox控制元件來設定介面。

在.NET中,還可以直接把FrmMain的BackgroundImage屬性中插入一張圖片。

【總結】

其實要達到一種效果有很多種的方法。