如何将表单设置为具有透明背景

时间:2009-02-05 21:26:44

标签: vb.net winforms

我正努力让我的表单在vb.net中具有透明背景

目前采用New I set

的形式
Me.SetStyle(ControlStyles.SupportsTransparentBackColor, true) 

但是表单仍显示为具有默认的灰色背景

任何人都可以帮忙吗?

编辑:我需要表单上的控件可见,所以我不认为将不透明度设置为0将起作用

编辑:我尝试了透明度密钥解决方案,但它不起作用。我有一个黑色背景的圆形图像。 OnPaint我将透明度键设置为0,0的img像素,然后这给我留下了圆形图像(我想要的)它隐藏了黑色背景,但我仍然保留了表单的默认灰色矩形。

下面是我的代码 -

Public Sub New()

    Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    Me.BackColor = Color.Transparent
    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    Me.Timer1.Start()
End Sub

Private Sub frmWoll_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

    Dim img As Bitmap = CType(Me.BackgroundImage, Bitmap)

    img.MakeTransparent(img.GetPixel(2, 2))
    Me.TransparencyKey = img.GetPixel(2, 2)
End Sub

4 个答案:

答案 0 :(得分:12)

将TransparencyKey用于透明表格。

例如

TransparencyKey = Color.Red
Button1.BackColor = Color.Red

现在运行表格,你会发现button1上有一个洞。

因此,使用此方法,您可以在绘画中创建一个掩模图像,其中部分必须是透明的,并将该图像应用于表单,并且表单现在是透明的。

编辑: 很抱歉迟到的回复。

以下内容已根据您的要求进行了修改

Public Sub New()

    Me.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
    Me.BackColor = Color.Transparent

    ' This call is required by the Windows Form Designer.
    InitializeComponent()
    ' Add any initialization after the InitializeComponent() call.
    Dim img As Bitmap = CType(Me.BackgroundImage, Bitmap)

    'img.MakeTransparent(img.GetPixel(2, 2))
    Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
    Me.TransparencyKey = img.GetPixel(2, 2)
End Sub

答案 1 :(得分:2)

将Form的TransparencyKey颜色属性设置为与窗体的Background color属性

相同

答案 2 :(得分:1)

您可以使用一些方法。

  • 使用表格TransparencyKey
  • 覆盖OnPaintBackground(WM_ERASEBKGND)
  • 覆盖WndProc并处理绘制消息(WM_NCPAINT,WM_PAINT等)

我建议覆盖窗口过程以获得最佳效果。

答案 3 :(得分:-2)

Me.Opacity = 0

警告:

  1. 这是针对整个表单,而不仅仅是背景。有一些解决方法可以使某些部分更加模糊。
  2. 它只是伪透明的,它会拍摄背后的内容。它很聪明,可以知道何时移动表单,但不能在表单顶部移动其他透明对象时。