如何使用户控件透明

问题描述 投票:0回答:2

我已将 userControl 从 vb6 迁移到 vb.net,但我对它的透明度有疑问。 在vb6中,属性backstyle用于使控件透明,但在vb.net中,我找不到它。 这个属性有任何等价物吗?

vb.net user-controls transparency
2个回答
4
投票

在网上搜索后,我找到了这颗珍珠:

Protected Overrides ReadOnly Property CreateParams() As CreateParams
    Get
        ' Make background transparent
        Dim cp As CreateParams = MyBase.CreateParams
        cp.ExStyle = cp.ExStyle Or &H20
        Return cp
    End Get
End Property

Protected Overrides Sub OnPaintBackground(e As PaintEventArgs)
    '' call MyBase.OnPaintBackground(e) only if the backColor is not Color.Transparent
    If Me.BackColor <> Color.Transparent Then
        MyBase.OnPaintBackground(e)
    End If
End Sub

我已经测试过了,它似乎工作正常。


0
投票

只是一个观察:当我们将 CreateParams.ExStyle 设置为 &H20 时,我们为类中的每个窗口分配了一个唯一的设备上下文,我注意到如果这些用户控件堆叠在一起,它们会颠倒它们的显示顺序。因此,如果我们将用户控件置于最前面,而不是像控件通常那样最后绘制,它首先绘制,显示在所有其他控件后面,插入显示堆栈的底部,而不是顶部(最后显示) .同样,如果我们将其置于底层,它最后绘制,显示在最顶层,因为它实际上被放在显示列表的顶部,而不是它的开始。这是因为,在设置了这个标志的情况下,它们在显示堆栈中以相反的顺序排列。一旦我们全神贯注并知道它会发生,我们就可以处理好。

© www.soinside.com 2019 - 2024. All rights reserved.