在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。 –