2009-12-15 12 views
1

J'ai un composant activeX avec plusieurs événements. débogage de cette DLL dans les preuves .net, que les événements sont levés et peuvent être arrêtés (est-ce un mot?;)) l'enregistrement de cette DLL via regasm/codebase fonctionne et je peux ajouter cette activeX dans ax sur un formulaire. les événements sont listés dans l'explorateur activeX dans ax. mais il semble que je n'ai aucune chance de gérer les événements soulevés dans ax.Gestion des événements ActiveX dans ax 2009

L'utilisation d'un autre ActiveX (par exemple, le contrôle du sélecteur de date et d'heure Microsoft) fonctionne correctement.

j'apprécie tous les conseils ou astuces!

Voici quelques lignes du code dont je parle.

namespace <someNamespace> 
{ 
    [ProgId("<someProgID>")] 
    [ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(<myInterface>))] 
    [Guid("<someGUID>")] 
    [ComVisible(true)] 

    public class <ClassName> 
    { 

     [instantiate some COM-Object, named dummy] 

     public 
     <ClassName>(...) 
     { 
      init(); 
     } 

     public delegate void <someDelegate>(int a, int b); 
     public event someDelegate myDelegate; 

     [ComVisible(true)] 
     public void OnEvent(int a, int b) 
     { 
      if (myDelegate != null) 
      { 
       Console.WriteLine("yippie"); 
      } 
     } 

     [ComVisible(true)] 
     public void run(...) 
     { 
      this.myDelegate += new someDelegate(this.OnEvent); 
     } 

     private void 
     onEvent(int a, int b) 
     { 
      myDelegate(a, b); 
     } 

     #endregion 
    } 
} 

[Guid("<someOtherGUID>")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface <myInterface> 
{ 
    [DispId(1)] 
    void myDelegate(int a, int b); 
} 
} 

ce sont les fonctions de base (espère ne pas oublier l'un d'entre eux) se rapportant à la chose de l'événement. l'activeX lui-même est un wrapper pour un com-object, qui lui-même ne peut pas être intégré dans ax, afaik. "onEvent" est une fonction appelée par un événement du com-object et déclenche "myDelegate". tout ceci fonctionne bien, testant en studio visuel - l'événement peut être traité sur un formulaire, en appelant la partie activeX. la dernière étape serait de gérer cet événement dans ax. Comme je l'ai déjà écrit, l'événement lui-même est répertorié correctement dans l'explorateur activeX, mais je n'ai pas trouvé un moyen de réagir sur cet événement en x ++.

+1

@Nico, désolé j'ai d'abord mal lu votre question. Je n'ai jamais utilisé x ++ ou axapta. Je pensais que vous étiez aux prises avec WinForms, mais vous semblez avoir cette partie triée. Désolé, je ne peux pas être plus utile .... – ParmesanCodice

Répondre

0

Je suppose que votre ActiveX est également écrit en .NET.

Il existe quelques amusements lors de l'écriture de contrôles ActiveX dans .NET. L'un d'entre eux est que vous avez besoin d'une interface distincte pour les événements exposés par le contrôle ActiveX. Vous devrez également augmenter manuellement l'événement sous votre contrôle, lorsque toutes les conditions sont remplies.

J'ai répondu à une question similaire à propos de handling ActiveX events (written in C#) from Javascript. Peut-être vérifier la structure ActiveX j'ai posté là-bas.

+0

Malheureusement, votre explication ne fonctionne pas - puisque je pense que les 600 caractères pour un commentaire ne suffisent pas à écrire un code-exemple, je vais le faire via la réponse suivante ! –

+0

@Nico Modifier votre question et le mettre là. – ParmesanCodice