Comment puis-je créer un contrôle ActiveX écrit avec des événements de levée C # en JavaScript lorsque l’utilisateur clique dessus?

Je vois déjà quelques questions à ce sujet sur SO, mais je pense que la mienne est suffisamment différente pour ne pas être considérée comme un doublon (si je me trompe, faites-le-moi savoir).

J’ai un contrôle ActiveX que j’ai écrit en C # et bien qu’il fonctionne principalement, je souhaite déclencher un événement en JavaScript lorsque l’on clique dessus (il affiche une image et constitue donc un élément visuel de la page).

L’objective final de ce que je cherche à accomplir n’est pas différent de celui d’une et d’un événement onclick permettant de générer une fonction JavaScript lorsque la zone de la balise a été cliquée.

La plupart des choses que j’ai lues à ce sujet expliquent en détail comment gérer les événements dans un contrôle ActiveX et envoyer des informations, et c’est bien, mais cela semble excessivement compliqué. Je ne cherche pas à communiquer avec le contrôle ActiveX, il me faut simplement une fonction JavaScript à activer lorsque je clique dessus, d’une manière similaire à une ou

. Je peux gérer tout le rest en JavaScript. Envelopper simplement le contrôle dans un ou

avec un événement onclick n’a aucun effet – le contrôle ActiveX le remplace à peu près.

Existe-t-il un moyen simple de gérer cela pour un contrôle ActiveX écrit en C #?

J’imagine qu’une autre façon de l’exprimer est la suivante: je travaille avec un contrôle tiers et nous devons utiliser un code similaire à celui-ci pour le faire communiquer avec notre page HTML via JavaScript.

    

AXObjectName est le nom / id du contrôle et AXObjectName_OnMouseClick est le nom de la fonction JavaScript qui sera déclenchée dans mon code, en passant un paramètre d’ index . Cependant, que dois-je faire pour configurer une méthode telle que OnMouseClick dans le contrôle? Et si je ne souhaite pas transmettre d’informations réelles (c’est-à-dire qu’il n’ya pas d’ index ), dois-je aller aussi loin?

    Les événements ActiveX sont gérés via COM. Vous devez donc vous y plonger un peu.

    La chose à retenir avec COM est que tout est géré via des interfaces, vous devez donc normalement créer deux interfaces, une pour les propriétés et l’autre pour vos événements.

    La clé pour les événements est de marquer votre classe avec l’atsortingbut ComSourceInterfaces, décrit par MSDN comme “Identifie une liste d’interfaces exposées en tant que sources d’événements COM pour la classe atsortingbuée”.

    Cette structure de classe simple devrait fonctionner pour vous (elle l’a été par le passé).

     namespace MyActiveX { [Guid("Your-GUID") ,InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IActiveXEvents { [DispId(1)] void OnMouseClick(int index); } [Guid("Another-GUID"),InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface IActiveX { //[DispId(1)] // Any properties you want here like this // ssortingng aProperty { get; set; } } [ComVisible(true)] [Guid("Yet-Another-GUID"), ClassInterface(ClassInterfaceType.None)] [ProgId("MyActiveX")] [ComSourceInterfaces(typeof(IActiveXEvents))] public partial class MyActiveX : UserControl, IActiveX { public delegate void OnMouseClickHandler(int index); public event OnMouseClickHandler OnMouseClick; // Dummy Method to use when firing the event private void MyActiveX_nMouseClick(int index) { } public MyActiveX() { InitializeComponent(); // Bind event this.OnMouseClick = new OnMouseClickHandler(this.MyActiveX_MouseClick) } public void FireTheEvent() { int index = -1; this.OnMouseClick(index); } } } 

    Si vous n’avez besoin d’aucune propriété, vous pouvez simplement exclure l’interface IActiveX. De plus, si vous souhaitez utiliser l’événement Click, vous devez le marquer comme nouveau pour le transmettre à COM.