2016-04-22 66 views
0

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

感謝

回答

0

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

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

希望這有助於。

+0

不幸的是,此更改不會影響結果。有關使用來自不同控件的ocxState的信息來自以下網站:http://www.softelvdm.com/Support/NETDynamicallyCreatedControls/tabid/150/。事實上,你所提出的改變並沒有什麼不同,這讓我認爲設置OcxState的這一行代碼可能仍是問題,但我不知道如何正確設置新的OcxState。 –

0

我在我的代碼中發現了錯誤。

.createControl()方法試圖創建外部QuickTime窗口。該控件適用於VLC Player之類的東西,但QuickTime不支持它,所以沒有任何事情發生。

只要我註釋了createControl(),行爲就成了我期待的。

.createControl()是我在網上找到的代碼中的一個剩餘部分,我認爲這對於啓動ActiveX控件是非常重要的,但事實並非如此。

相關問題