2009-06-23 126 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