[VB.NET]Change MDI Parent BackColor

[VB.NET]Change MDI Parent BackColor

最近在調整MDI背景顏色時,發現MDI的背景顏色不能直接設定。直接設定的話會像下圖一樣,會看不到預期的結果。

image

 

其實這是因為WinForm在設定了IsMdiContainer屬性後,WinForm上面會自動添加一個MdiClient控制項在上面。這個控制項是MDI子表單的容器,能放置MDI子表單。而WinForm的BackColor在改變時並未跟著調整MdiClient.BackColor才會有這樣的現象。

 

有興趣的可以試著拖曳一下Visual Studio內部的視窗,會有機會在更新表單時看到一會表單的背景顏色。

image

 

要解決這樣的問題,我們可以把WinForm表單內的MdiClient的背景顏色跟著WinForm.BackColor調整。

 

像是可以用迴圈找尋MdiClient後調整


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SetMdiBackColor()
    End Sub

    Private Sub SetMdiBackColor()
        For Each c As Control In Me.Controls
            If TypeOf c Is MdiClient Then
                c.BackColor = Me.BackColor
                Exit For
            End If
        Next
    End Sub
End Class

 

也可以直接跟改最後一個控制項的背景顏色(這是因為MdiClient會是第一個被加進去的控制項的原因)


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SetMdiBackColor()
    End Sub

    Private Sub SetMdiBackColor()
        Me.Controls(Me.Controls.Count - 1).BackColor = Me.BackColor
    End Sub
End Class

 

當然,最好可以把表單的BackColor與MdiClient的BackColor給繫在一起。

 

Link