表单内的半透明子表单(或其他半透明图层)

时间:2011-12-16 14:17:38

标签: vb.net winforms transparency

我正在尝试在某些事件发生时在整个表单上绘制一个半透明图层,并在此半透明图层前面显示提示(类似于启用了UAC的Windows Vista / 7中的效果)

起初我试图使用自定义的半透明面板,但这似乎根本不起作用。因此,我现在尝试使用表单上的opacity属性在表单中使用子表单。但是,当这种半透明形式添加到主窗体的控件并显示时,它会失去透明度。

在半透明层实际上不是主要形式的组件的时刻,我有一个hacky工作,然后透明度工作,但显然这不是理想的,可能会导致各种问题更进一步。

另外,为了进一步复制事物,我想要包含表单的表单不能被制作成Mdi Parent(如果这会有所帮助),因为它本身包含在多个表单的制表符控件中。

基本上任何可以帮助我在表格的其余部分得到一个半透明的“黑暗”层并且提示在顶部的任何东西都是理想的,我不太关心它是如何实现的。

感谢。

1 个答案:

答案 0 :(得分: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

在Form2的绘画事件中,您可以使用填充画笔将其设置为半透明:

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
相关问题