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