2011-12-16 76 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