动态添加ActiveX控件到VB.Net表单什么都不做

时间:2016-04-22 18:58:58

标签: vb.net activex quicktime

在VB.Net中,我试图在用户单击按钮时向表单添加QuickTime ActiveX控件。

我的代码如下。为了测试,我有一个设计时的ActiveX控件,“designed_control”,它工作正常,但我正在尝试将“dynamic_created_control”放在表单上。

Public Class Form1

Private moviePath As String = "\\localhost\D$\Temp\Test.mov"
Friend WithEvents dynamically_created_control As AxQTOControlLib.AxQTControl = Nothing

Private Sub buttonLoadMovieIntoExisting_Click(sender As Object, e As EventArgs) Handles buttonLoadMovieIntoExisting.Click
    ' load movie into control created in designer, works fine:
    MessageBox.Show(moviePath)
    With designed_control
        .URL = moviePath
        MessageBox.Show("URL:" + .URL)
    End With
End Sub

Private Sub buttonCreateNewControl_Click(sender As Object, e As EventArgs) Handles buttonCreateNewControl.Click
    ' create a new ActiveX control when button is clicked:
    dynamically_created_control = New AxQTOControlLib.AxQTControl
    CType(dynamically_created_control, System.ComponentModel.ISupportInitialize).BeginInit()
    Me.SuspendLayout()
    Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
    With dynamically_created_control
        .CreateControl()
        .Enabled = True
        .Location = New System.Drawing.Point(160, 160)
        .Name = "new_control"
        .OcxState = CType(resources.GetObject("designed_control.OcxState"), System.Windows.Forms.AxHost.State)
        .Size = New System.Drawing.Size(480, 270)
        .TabIndex = 0
        Me.Controls.Add(Me.dynamically_created_control)
        .Visible = True
        .URL = moviePath
    End With
    CType(dynamically_created_control, System.ComponentModel.ISupportInitialize).EndInit()
    Me.ResumeLayout(True)
    With dynamically_created_control
        MessageBox.Show("URL:" + vbCrLf + .URL)
        .Movie.Play()
    End With
End Sub

End Class

这不起作用;当我点击'buttonCreateNewControl'时,它会弹出带有正确URL的'URL:'消息框,表明正在设置dynamic_created_control的属性而且对象不是什么。然而,我期望的控件的矩形形状不会出现在表格上。一旦我调用控件的.Play()方法,它就会引发异常,因为.Movie什么都不是,什么时候不应该。

当基于设计人员的版本绝对正常时,有人能发现为什么动态生成的ActiveX控件不会出现(但不会抛出错误)吗?

顺便说一下,我知道围绕QuickTime的安全问题,这就是为什么我现在正在尝试编写一些代码,如果用户决定可以选择使用QuickTime。

由于

2 个答案:

答案 0 :(得分:0)

我相信您可能需要更新buttonCreateNewControl_Click才能使用

    .OcxState = CType(resources.GetObject("dynamically_created_control.OcxState"), System.Windows.Forms.AxHost.State)

希望这有帮助。

答案 1 :(得分:0)

我在代码中发现了错误。

.createControl()方法试图创建一个外部QuickTime窗口。该控件适用于像VLC Player这样的东西,但QuickTime不支持它,所以什么也没发生。

一旦我注释掉createControl(),行为就变成了我所期待的。

.createControl()是我在网上找到的代码的剩余部分,我认为它对于启动ActiveX控件至关重要,但它不是。