如何为面板

时间:2017-08-16 10:12:41

标签: vb.net vlc

如何将面板透明度设置为不透明度为0.我按程序设置面板,它位于视频播放器之上。代码就像这样

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  ', AxVLCPlugin21.Click       
    Dim panelx As New Panel
    panelx.Visible = True
    panelx.Size = New Size(AxVLCPlugin21.Width, CInt(AxVLCPlugin21.Height / 2))
    panelx.BackColor = System.Drawing.Color.Transparent
    AxVLCPlugin21.Controls.Add(panelx)        
    panelx.BringToFront()
    'AddHandler panelx.DoubleClick, AddressOf panelx_click
End Sub

结果是这样的 enter image description here

然后我试着播放它只显示一半的视频 enter image description here

我使用面板的原因是暂停视频(通过透明设置面板在视频顶部),当我点击面板,因为视频不支持点击事件

更新

我把代码放在usercontrol1中 enter image description here

仍然给我一个错误,虽然我已在设计器中插入代码。太明确了我把代码设计师置于主设计师代码之后。我试图只在主设计器代码中放入inherit panel代码,但它只接受一个继承。 enter image description here

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是创建一个继承面板类的自定义控件,并使用以下代码覆盖CreateParamsOnPaintBackground

(Zohar的道具Peled他的帖子here

将代码替换为:

Public Class TransparentPanel
    Inherits System.Windows.Forms.Panel

    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
End Class

并将设计师代码替换为:

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
Partial Class TransparentPanel
    Inherits System.Windows.Forms.Panel

    'Control overrides dispose to clean up the component list.
    <System.Diagnostics.DebuggerNonUserCode()>
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Required by the Control Designer
    Private components As System.ComponentModel.IContainer

    ' NOTE: The following procedure is required by the Component Designer
    ' It can be modified using the Component Designer.  Do not modify it
    ' using the code editor.
    <System.Diagnostics.DebuggerStepThrough()>
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
    End Sub

End Class

您要替换的代码最初可能看起来不同,但使用此代码可确保一切正常。

注意:如果背景颜色设置为TransparentControl,则此代码将使面板透明(这取决于控件通常实际上与透明相同。)

我试图找到用于创建和实现自定义控件的更新资源,但我无法找到维护的资源。所以这里有一些关于如何创建自定义控件的分步说明。

创建可在设计器中使用的自定义控件:

(我在下面的示例中使用Visual Studio 2015,在其他版本中可能会有所不同。)

1。创建新的Windows窗体控件库

enter image description here

2. 然后右键单击并将控件重命名为“TransparentPanel”(或     无论你喜欢什么名字)

3. 将上面的代码分别粘贴到后面的代码和设计器代码中(如果不使用“TransparentPanel”,则更改类名)

4. 构建项目(这将创建您需要在主项目中引用的.dll)

5. 这个是可选的,但最好将DLL存储在除项目bin文件夹之外的某个位置,因此,可选择导航到控件库bin文件夹并复制创建的DLL到您要存储自定义DLL的其他位置。

6。转到要使用控件的项目,然后右键单击工具箱并单击“选择项目...”

enter image description here

7。确保您使用的是“.NET Framework组件”,然后选择“浏览”。

enter image description here

8. 导航到控件库的bin文件夹(或存储DLL的位置),选择控件并单击“打开”。

enter image description here

9。您将在“选择工具箱项”表单中看到现在选择的TransparentControl。点击“确定”

10。那么你应该能够在“常规”部分找到控件。

enter image description here

11. 将控件拖放到表单上。

注意: 控件在设计器中可能看起来不透明,但在运行时它应该按照您的要求进行操作。

我希望这适合你!