2009-06-23 8 views
0

이벤트를 발생시키는 ActiveX 컨트롤 (OCX 파일)이 있습니다. C#에서 해당 이벤트를 catch하고 싶습니다. 어떻게해야합니까?C에서 ActiveX 컨트롤 이벤트 처리

내가 자바 스크립트에서 컨트롤의 이벤트를 잡을 수 있습니다, 여기에 내가 C#에서 그것을 할 원하는

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

코드입니다. 그래서 컨트롤의 COM 참조를 추가했습니다. 그것은 폼의 클래스에서 구현 한 인터페이스를 포함합니다. 인터페이스 중 하나에서 이벤트가 있는데, 나는 그 이벤트를 구독하고 기본적으로 캡처하려는 이벤트이지만 발생하지는 않습니다.

여기

은 제외하고 ... 뭔가 작업을해야 게시 한 무엇
// 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이 컨트롤의 이름입니다
myActiveXControl.NewCall += 
     new _DCRMCntrlEvents_NewCallEventHandler(this.OnNewCall); 

은 (또한 이벤트를 제공하는 인터페이스를 구현을).

+0

감사합니다. – akif

1

는 양식 자체의 정의로 수행하는 작업에 대한 재미 보이는 내 C# 코드입니다. Form 및 CRMCntrl에서 Form1 클래스를 파생시키는 중입니까? 이것은 당신이 기대하는 것처럼 보이는 컨트롤의 인스턴스를 생성하지 않습니다. 폼에 ActiveX 컨트롤의 새 인스턴스를 추가하고 어떤 일이 발생하는지 확인하십시오.

+0

안녕하세요, 대단히 감사합니다. P – akif

관련 문제