In VB.Net versuche ich, ein QuickTime ActiveX-Steuerelement zu einem Formular hinzuzufügen, wenn der Benutzer auf eine Schaltfläche klickt.Das dynamische Hinzufügen eines ActiveX-Steuerelements zu VB.Net-Formular tut nichts
Mein Code ist unten. Zum Testen habe ich ein Entwurfszeit-ActiveX-Steuerelement, "designed_control", das gut funktioniert, aber ich versuche, "dynamically_created_control" auf dem Formular zu platzieren.
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
Dies funktioniert nicht; Wenn ich auf "buttonCreateNewControl" klicke, wird die "URL:" -Meldung mit der korrekten URL angezeigt, die anzeigt, dass die Eigenschaften von dynamically_created_control gesetzt sind und das Objekt nicht nichts ist. Die rechteckige Form des Steuerelements, die ich erwarte, erscheint jedoch nicht auf dem Formular. Sobald ich die .Play() - Methode des Steuerelements aufruft, löst es eine Ausnahme aus, weil .Movie nichts ist, wenn es nicht sein sollte.
Kann jemand erkennen, warum das dynamisch generierte ActiveX-Steuerelement einfach nicht erscheint (aber ohne Fehler zu werfen), wenn die Designer-basierte Version absolut in Ordnung ist?
Übrigens, ich bin mir der Sicherheitsprobleme rund um QuickTime bewusst, weshalb ich jetzt versuche, etwas zu programmieren, das optional QuickTime verwenden kann, wenn der Benutzer entscheidet.
Dank
Leider hat diese Änderung keinen Einfluss auf das Ergebnis. Die Informationen zur Verwendung von ocxState von einem anderen Steuerelement finden Sie hier: http://www.softtelvdm.com/Support/NETDynamicallyCreatedControls/tabid/150/. Die Tatsache, dass Ihre vorgeschlagene Änderung keinen Unterschied macht, lässt mich denken, dass diese Codezeile, die OcxState festlegt, immer noch das Problem ist, aber ich weiß nicht, wie ich einen neuen OcxState richtig einstellen soll. –