簡體   English   中英

在C#中處理ActiveX控件事件

[英]Handle ActiveX Control Event in C#

我有一個引發事件的ActiveX控件(一個OCX文件)。 我想在C#中捕獲該事件。 我該怎么做呢?

我可以在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);
        }
    }
}

從您的代碼看來, CRMCntrl似乎是帶有單個NewCall事件的接口。 因此,如果您想實現該接口,那么您就是負責觸發事件而不是處理事件的人。

要處理從ActiveX控件觸發的事件,您需要使用實際控件的實例 -這就是事件的來源。 如果使用設計器添加了控件,請嘗試查找包含對控件的引用的私有字段的名稱。

您將需要以某種方式更改此設置:

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

對此:

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

其中, myActiveXControl是控件的名稱(該控件還實現提供事件的接口)。

您所發布的內容應該可以正常工作,除了...對表單本身的定義所做的事情看起來很有趣。 您是從Form和CRMCntrl派生類Form1嗎? 這不會像您期望的那樣創建控件的實例。 嘗試將ActiveX控件的新實例放到窗體上,然后看看會發生什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM