2009-06-23 27 views
0

J'ai un contrôle ActiveX (un fichier OCX) qui déclenche un événement. Je veux attraper cet événement en C#. Comment vais-je le faire?Gestion de l'événement de contrôle ActiveX en C#

je peux attraper l'événement de contrôle en JavaScript, voici le code pour que

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> 
<title>New Page 1</title> 
</head> 
<body > 
<script type="text/javascript" for="CRMCntrl1" event="NewCall(szCallID, szCallType, nCallStartTime, szCLI, szOtherInfo)">  
     document.getElementById("abc").innerHTML="CallID: " + szCallID + "</br>" + 
      "CallType: " + szCallType + "</br>" + 
      "CallStartTime: " + nCallStartTime + "</br>" + 
      "CLI: " + szCLI + "</br>" + 
      "OtherInfo: " + szOtherInfo + "</br>" ; 

</script> 
<p> 
<object id="CRMCntrl1" classid="clsid:D26FE0DF-5CAC-44E4-AA7A-E1794D9634D1"> 
</object> 
</p> 
<div id="abc"> 
</div> 
</body> 
</html> 

Je veux le faire en C#. J'ai donc ajouté une référence COM du contrôle. Il contient des interfaces que j'ai implémentées dans la classe de mon formulaire. Dans l'une des interfaces il y a un événement, j'ai souscrit à cet événement, en gros c'est l'événement que je veux capturer, mais il n'est pas levé.

Voici mon code C#

// other namespaces here 
using CRMCNTRLLib; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form, CRMCntrl 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

      this.NewCall += new _DCRMCntrlEvents_NewCallEventHandler(this.OnNewCall); 
     } 

     public event _DCRMCntrlEvents_NewCallEventHandler NewCall; 

     public void AboutBox() 
     { 
      MessageBox.Show("steadfast"); 
     } 

     public void OnNewCall(string szCallID, string szCallType, int nCallStartTime, string szCLI, string szOtherInfo) 
     { 
      MessageBox.Show(szCallID + szCallType + nCallStartTime + szCLI + szOtherInfo); 
     } 
    } 
} 

Répondre

2

De votre code, il semble que CRMCntrl est une interface avec un seul événement NewCall. Donc, si vous voulez mettre en œuvre cette interface, alors vous êtes celui qui est responsable de tirant l'événement, ne pas le gérer.

Pour gérer un événement déclenché à partir de votre contrôle ActiveX, vous devez utiliser l'instance de votre contrôle actuel - d'où l'événement doit provenir. Si vous avez ajouté le contrôle en utilisant le concepteur, essayez de trouver quel est le nom du champ privé qui contient une référence à votre contrôle.

D'une certaine façon, vous aurez besoin de changer ceci:

this.NewCall += 
     new _DCRMCntrlEvents_NewCallEventHandler(this.OnNewCall); 

à ceci:

myActiveXControl.NewCall += 
     new _DCRMCntrlEvents_NewCallEventHandler(this.OnNewCall); 

myActiveXControl est le nom de votre commande (qui implémente également l'interface fournissant l'événement).

+0

Merci, cela a fonctionné :) – akif

1

Qu'est-ce que vous avez posté devrait fonctionner, sauf ... quelque chose semble drôle ce que vous faites avec la définition de la forme elle-même. Vous dérivez la classe Form1 à partir de Form et CRMCntrl? Cela ne créera pas une instance du contrôle de la manière que vous semblez attendre. Essayez plutôt de placer une nouvelle instance du contrôle ActiveX sur le formulaire et voyez ce qui se passe.

+0

Salut, merci beaucoup: P – akif

Questions connexes