2009-06-23 77 views
0

我有一个引发事件的ActiveX控件(一个OCX文件)。我想用C#来捕捉这个事件。我该如何去做呢?在C中处理ActiveX控件事件#

我能赶上在JavaScript控件的事件,这里是该

<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> 

我想这样做,在C#代码。所以我添加了控件的COM参考。它包含我在Form类中实现的接口。在其中一个界面中有一个事件,我订阅了该事件,基本上它是我想要捕获的事件,但不会引发。

这是我的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); 
     } 
    } 
} 

回答

2

从您的代码看起来好像CRMCntrl是一个单个NewCall事件的接口。所以如果你想实现那个接口,那么你是谁负责射击这个事件,不处理它。

要处理从ActiveX控件触发的事件,您需要使用实际控件的实例 - 这是事件应来自的地方。如果您使用设计器添加了控件,请尝试查找包含对控件引用的专用字段的名称。

不知怎的,你将需要更改此:

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

这样:

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

其中myActiveXControl是你的控件的名称(这也实现提供事件的接口)。

+0

谢谢,这工作:) – akif 2009-06-23 11:17:15

1

你已经张贴什么应该工作,除非......东西看起来很滑稽关于您的形式本身的定义做什么。你从窗体和CRMCntrl派生类Form1?这不会以您所期望的方式创建控件的实例。尝试在窗体上放置ActiveX控件的新实例,并查看会发生什么。

+0

嘿,非常感谢您:P – akif 2009-06-23 11:18:39