Visual Basic PictureBox上没有透明度

时间:2015-09-07 04:52:30

标签: vb.net transparency picturebox

我在Visual Basic Express 2010上有一些图片框,这些图片上有alpha通道,但是当背景颜色设置为透明时,它不会变得透明,而是成为表单的颜色。我仍然无法通过alpha地图看到任何其他内容。问题是什么? 我不想只看到图片框后面的父对象,而是看到它下面的所有其他对象。

1 个答案:

答案 0 :(得分:4)

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

使用方法:

1)创建自定义类。 (来自"添加新项目"菜单)

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

3)使其继承原始PictureBox。

Public Class TransparentPictureBox
    Inherits PictureBox

End Class

4)将此代码粘贴到类中:

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)从ToolBox中选择您的组件并将其添加到表单中。

希望这有帮助!

<强>结果:

Result using two custom picture boxes and one button.

编辑:

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

Building your project.

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

Custom project Components.