2016-04-22 31 views
0

VB.Netでは、ユーザーがボタンをクリックすると、フォームにQuickTime ActiveXコントロールを追加しようとしています。VB.NetフォームにActiveXコントロールを動的に追加すると、何もしません。

私のコードは以下の通りです。テストのために、私は設計時のActiveXコントロール "design_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:'メッセージボックスがポップアップし、それによって、dynamic_created_controlのプロパティが設定され、オブジェクトが何もないことが示されます。しかし、私が期待していたコントロールの四角形はフォームには現れません。コントロールの.Play()メソッドを呼び出すと、.Movieは何もないので、例外ではないので、例外が発生します。動的に生成されたActiveXコントロールは、単に表示されます(ただし、エラーをスローせずに)しない理由

誰もがデザイナーベースのバージョンは、絶対に大丈夫ですとき、スポットすることはできますか?

ちなみに、私は現在、QuickTimeのセキュリティ上の問題を認識しています。なぜなら、ユーザーが決めた場合、の場合はのQuickTimeを使用できるコードを作成しようとしています。私はあなたが

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

を使用するようにbuttonCreateNewControl_Clickを更新する必要があるかもしれません信じてい

おかげ

答えて

0

は、この情報がお役に立てば幸いです。

+0

残念ながら、この変更は結果には影響しません。別のコントロールからのocxStateの使用に関する情報は、ここからです:http://www.softelvdm.com/Support/NETDynamicallyCreatedControls/tabid/150/。あなたの提案された変更が何の違いもないという事実は、OcxStateを設定するこのコード行がまだ問題であるかもしれないと思うが、私は新しいOcxStateを正しく設定する方法を知らない。 –

0

私のコードでエラーが見つかりました。

.createControl()メソッドが外部QuickTimeウィンドウを作成しようとしていました。そのコントロールはVLC Playerのようなもので動作しますが、QuickTimeはそれをサポートしていないので何も起こっていません。

私がcreateControl()をコメントアウトすると、動作は私が期待していたものになりました。

.createControlは()私はオンラインで見つけるコードから残っていた、私はそれがActiveXコントロールを開始するために不可欠だったと仮定そうではありません。

関連する問題