C# 如何处理事件:使用c sharp的控件数组(旧com控件)

C# 如何处理事件:使用c sharp的控件数组(旧com控件),c#,arrays,com,controls,C#,Arrays,Com,Controls,我正在尝试使用一个旧的com控件(一个控件数组),以下示例:,,解释(或至少我所了解的)如何使用.net控件处理控件数组的事件,因此它们有Sender和EventArgs 我的问题是:如何处理旧com控件阵列的事件? 编辑: 数组将在开始时动态创建,例如:Q。您需要多少个连接?A.5 例如: 该控件具有以下事件:已连接控件(int状态,字符串描述) 我可以使用相同的参数生成一些函数,并将其分配给连接的事件,但我不知道如何使用控件数组来完成 太感谢你的帮助了,对糟糕的英语很抱歉。。。我不是navi

我正在尝试使用一个旧的com控件(一个控件数组),以下示例:,,解释(或至少我所了解的)如何使用.net控件处理控件数组的事件,因此它们有Sender和EventArgs

我的问题是:如何处理旧com控件阵列的事件?

编辑: 数组将在开始时动态创建,例如:Q。您需要多少个连接?A.5

例如: 该控件具有以下事件:已连接控件(int状态,字符串描述)

我可以使用相同的参数生成一些函数,并将其分配给连接的事件,但我不知道如何使用控件数组来完成


太感谢你的帮助了,对糟糕的英语很抱歉。。。我不是navite英语使用者

COM事件有不同的模式,您没有每个事件都有一个处理程序,您有一个事件接收器对象,它钩住COM服务器计划引发的每个事件。如果您只是将ActiveX事件与委托挂钩,那么我假设您正在创建自己的事件接收器类

由于您有自己的事件接收器类,因此必须遵循事件发布者的事件签名。签名没有sender参数,因为COM服务器假定您有对发件人的引用,因此无需在每次引发事件时再次发送它

当然,您可以将服务器的引用缓存在中以供以后使用。事件接收器对象可以使用发送方参数声明其自己的托管事件版本,并在引发事件时将缓存的COM服务器作为发送方参数传递

差不多

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[TypeLibType(TypeLibTypeFlags.FHidden)]
[Guid("eventGuid")]
[CLSCompliant(false)]
public interface IEvent
{       
   [DispId(123)]
   void control_connected(int status, string description);
}
public class EventSink:IEvent
{
   object control;
   public EventSink (object control)
   {
        this.control=control;
   }  
   public event EventHandler<ControlConnectedEventArgs> ControlConnected;
   void control_connected(int status, string description);
   {
       EventHandler<ControlConnectedEventArgs> temp=this.ControlConnected;
       if(temp!=null)
           temp(this.control, new ControlConnectedEventArgs(status,description));
   }
}
[ComImport]
[接口类型(ComInterfaceType.InterfaceIsIDispatch)]
[TypeLibType(TypeLibTypeFlags.FHidden)]
[Guid(“事件Guid”)]
[CLSCompliant(false)]
公共接口事件
{       
[争端解决机制(123)]
已连接无效控件(int状态,字符串描述);
}
公共类事件接收器:IEvent
{
对象控制;
公共事件接收器(对象控件)
{
这个。控制=控制;
}  
公共事件事件处理程序已连接;
已连接无效控件(int状态,字符串描述);
{
EventHandler temp=this.ControlConnected;
如果(温度!=null)
temp(此控件、新控件已连接EventTargets(状态、说明));
}
}

如果您有一个COM服务器阵列,只需声明一个事件接收器阵列,将每个接收器连接到每个COM服务器,并从事件接收器而不是COM服务器连接事件处理程序。

Ty非常感谢您的帮助,您不仅帮我回答了问题,而且还向我展示了在哪里可以找到更多信息。