Visual Basic PictureBox 没有透明度

No Transparency on Visual Basic PictureBox

我在Visual Basic Express 2010上有一些图片框,这些图片上面有alpha通道,但是当背景色设置为透明时,它并没有变透明,而是变成了窗体的颜色。我仍然无法通过 alpha 贴图看到任何其他东西。问题是什么? 我不仅想看到图片框后面的父对象,还想看到它下面的所有其他对象。

我有一些代码可以通过将控件后面的每个控件绘制到它的背景上来为控件创建 "proper" 透明度。

使用方法:

1) 创建自定义 class。 (来自 "Add New Item" 菜单)

2) 给它一个你选择的名字(例如:TransparentPictureBox

3) 使之继承原来的PictureBox

Public Class TransparentPictureBox
    Inherits PictureBox

End Class

4) 将此代码粘贴到 class:

Protected Overrides Sub OnPaintBackground(e As System.Windows.Forms.PaintEventArgs)
    MyBase.OnPaintBackground(e)

    If Parent IsNot Nothing Then
        Dim index As Integer = Parent.Controls.GetChildIndex(Me)

        For i As Integer = Parent.Controls.Count - 1 To index + 1 Step -1
            Dim c As Control = Parent.Controls(i)
            If c.Bounds.IntersectsWith(Bounds) AndAlso c.Visible = True Then
                Dim bmp As New Bitmap(c.Width, c.Height, e.Graphics)
                c.DrawToBitmap(bmp, c.ClientRectangle)
                e.Graphics.TranslateTransform(c.Left - Left, c.Top - Top)
                e.Graphics.DrawImageUnscaled(bmp, Point.Empty)
                e.Graphics.TranslateTransform(Left - c.Left, Top - c.Top)
                bmp.Dispose()
            End If
        Next
    End If
End Sub

代码将覆盖 PictureBox 的 OnPaintBackground 事件,从而绘制它自己的透明背景。

5) 构建您的项目。

6) Select 工具箱中的组件并将其添加到表单中。

希望对您有所帮助!

结果:


编辑:

除了您的评论之外,还可以通过 Build > Build <your project name> 菜单开始构建您的项目。

然后您可以在工具箱顶部的 <your project name> Components 类别下找到您的自定义控件。