2011-12-16 102 views
0

我試圖在發生某些事件時在整個表單上繪製半透明圖層,並在此半透明圖層前提示(類似於啓用UAC的Windows Vista/7中的效果)表單中的半透明子表單(或其他半透明圖層)

起初,我試圖使用自定義半透明面板,但這似乎並不奏效。因此,我現在試圖在窗體中使用窗體上的不透明屬性使用子窗體。但是,如果將此半透明表單添加到主窗體的控件並顯示,它將失去透明度。

我有一個hacky的工作,當時半透明層實際上並不是主窗體中的一個組件,然後透明效果很好,但顯然這並不理想,並可能導致各種各樣進一步下行。

此外,爲了進一步詮釋事物,我想包含表單的表單不能被製作爲Mdi父類(如果這樣會有所幫助的話),因爲它本身包含在多個表單的選項卡控件中。

基本上,任何能夠幫助我在表單的其餘部分獲得半透明「黑暗」層的任何東西都是理想的,我並不太在意它是如何實現的。

謝謝。

+0

你必須要解決非理想的解決方案。只有頂級窗口可以是半透明的。 – 2011-12-16 14:37:42

回答

0

你可以創建一個帶有半透明背景無邊框形式:

Private Sub button1_Click(sender As Object, e As EventArgs) 
    Dim f As New Form2() 
    f.WindowState = FormWindowState.Normal 
    f.StartPosition = FormStartPosition.Manual 
    f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None 
    f.TransparencyKey = Color.Magenta 
    f.Bounds = Me.Bounds 
    f.ShowDialog() 
End Sub 

在窗體2的油漆事件,您可以將其設置爲通過艙口刷半透明:

Private Sub Form2_Paint(sender As Object, e As PaintEventArgs) 
    Dim hb = New HatchBrush(HatchStyle.Percent50, Me.TransparencyKey) 
    e.Graphics.FillRectangle(hb, Me.DisplayRectangle) 
End Sub