在VB.Net中,当用户点击一个按钮时,我试图添加一个QuickTime ActiveX控件到窗体。动态添加一个ActiveX控件到VB.Net窗体什么也不做
我的代码如下。为了测试,我有一个设计时的ActiveX控件“designed_control”,它工作正常,但我试图将“dynamically_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,显示了正在设置的属性dynamiscreated_control和对象不是什么。但是,我期望的控件的矩形形状不会出现在窗体上。只要我调用控件的.Play()方法,就会引发一个异常,因为.Movie什么也不是,当它不应该的时候。
任何人都可以发现为什么动态生成的ActiveX控件根本不会出现(但没有抛出错误),当基于设计器的版本是绝对好的?
顺便说一句,我知道QuickTime的安全问题,这就是为什么我现在试图编码的东西,可以可选如果用户决定使用QuickTime。
感谢
不幸的是,此更改不会影响结果。有关使用来自不同控件的ocxState的信息来自以下网站:http://www.softelvdm.com/Support/NETDynamicallyCreatedControls/tabid/150/。事实上,你所提出的改变并没有什么不同,这让我认为设置OcxState的这一行代码可能仍是问题,但我不知道如何正确设置新的OcxState。 –