Hallo Zusammen, Recherchiere zu dem Thema schon einige Zeit und finde nichts dazu. Hoffentlich hier...
Ich muss per später Bindung beliebige COMControls auf einer Form plazieren. Diese COMControls sollen auf MouseClick und MouseMove reagieren. Bei früher Bindung kein Problem, aber bei später Bindung hat das neu erzeugte Objekt die Ereignisse nicht. ich finde auch keinen Weg diese irgendwie hinzuzufügen.
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
dim obj as new object obj=CreateObject("irgendeinCOMSteuerelement")'zb. "MSComCtl2.DTPicker"
Ich habe den Code nicht getestet, aber das könnte mit WithEvents gehen:
Public Class Form1
Private WithEvents obj As Control
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click obj = CreateObject("MSComCtl2.DTPicker") End Sub
Private Sub obj_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles obj.MouseClick
End Sub End Class
Wie gesagt, ob das mit "Private WithEvents obj As Control" wirklich funktioniert kann ich nicht garantieren.
Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Klassentyp "System.Windows.Forms.Control" umgewandelt werden. Instanzen von Typen, die COM-Komponenten repräsentieren, können nicht in andere Typen umgewandelt werden, die keine COM-Komponenten repräsentieren. Eine Umwandlung in Schnittstellen ist jedoch möglich, sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufe für die IID der Schnittstelle unterstützt.
Verstehe aber den letzten Satz nicht...
Eine Umwandlung in Schnittstellen ist jedoch möglich, sofern die zugrunde liegende COM-Komponente QueryInterface-Aufrufe für die IID der Schnittstelle unterstützt.
Hatte auch schon mit CTYPE probiert. Immer die gleiche Meldung. Und dem Typ Object bekomme ich keine Events zugewiesen, bzw. weiß nicht wie.
Hast Du es mal mit früher Bindung versucht? Also direkt einen Verweis erstellen. Da könnte man erst mal feststellen, auf welchem Typ das Objekt wirklich basiert. Wenn das funktioniert, dann das gleiche mit später Bindung testen...
Ja, habe ich schon probiert. Der Typ ist in dem oben gegebenen Beispiel ein MSComCtl2.DTPicker . Mit früher Bindung kann man in der Syntax auch Eventhandler zuweisen, da das Object die entsprechenden Events auch hat. Aber mit später Bindung sind diese Events nicht bekannt...