我用C#写了一个Windows 控件,在控件中,我建立了一个delegate实现了自定义的事件处理函数,并且我也实现了IObjectSafety接口。我创建了一个Windows 应用程序进行测试,可以正常使用,访问属性和事件处理都没有问题。但是我把控件插入到HTML中,也可以使用属性方法,就是不能响应事件函数。请问该怎么办?在.html中,我通过<object>插入的控件,定义事件函数是:
<script language="javascript" for="myactivex" event="MyEvent(sender,eCode)">
   On_MyEvent(sender,eCode);
</script><script language="javascript">
   On_MyEvent(sender,eCode){
       alert(eCode);
}
</script>原来用VB6做的这个控件就可以这种方式调用。不知道为什么C#不行,新建的一个Windows 应用程序就可以。请高手帮忙,谢谢!困扰我两三天了已经。

解决方案 »

  1.   

    web里面支持的事件不是很多吧
      

  2.   

    可各位帮帮忙,我在控件中制定事件的代码大致如下:
     [Guid("D8B102E0-E92F-4191-82A1-02B92A62EA1E")]
        public class RTCEventArgs : EventArgs, IObjectSafety
        {
            // 定义消息类型为int
            private int msg;        public RTCEventArgs(int message){
                this.msg = message;
            }        public int EventMessages {
                get {
                    return this.msg;
                }
            }
            #region IObjectSafety 成员        public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
            {
                pdwSupportedOptions = 1;
                pdwEnabledOptions = 2;
            }        public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
            {
              // todo nothing
            }        #endregion
        }
    在控件类中:/*
     * 以下是事件处理
     * 
     */        public delegate void RTCEventHandler(object sender, RTCEventArgs e);        public event RTCEventHandler ActiveXEvent;        protected virtual void OnActiveXEvent(RTCEventArgs e)
            {
                if (ActiveXEvent != null)
                {
                    ActiveXEvent(this, e);
                }
            }
    在Windows应用程序中:
     this.myActivex.ActiveXEvent += new Carola.myActivex.RTCEventHandler(this.myActivex_ActiveXEvent);就可以处理事件了,为什么在HTML中就不行了呢?原来VB6里都可以啊。
      

  3.   

    可各位帮帮忙,我在控件中制定事件的代码大致如下:
     [Guid("D8B102E0-E92F-4191-82A1-02B92A62EA1E")]
        public class RTCEventArgs : EventArgs, IObjectSafety
        {
            // 定义消息类型为int
            private int msg;        public RTCEventArgs(int message){
                this.msg = message;
            }        public int EventMessages {
                get {
                    return this.msg;
                }
            }
            #region IObjectSafety 成员        public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
            {
                pdwSupportedOptions = 1;
                pdwEnabledOptions = 2;
            }        public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
            {
              // todo nothing
            }        #endregion
        }
    在控件类中:/*
     * 以下是事件处理
     * 
     */        public delegate void RTCEventHandler(object sender, RTCEventArgs e);        public event RTCEventHandler ActiveXEvent;        protected virtual void OnActiveXEvent(RTCEventArgs e)
            {
                if (ActiveXEvent != null)
                {
                    ActiveXEvent(this, e);
                }
            }
    在Windows应用程序中:
     this.myActivex.ActiveXEvent += new Carola.myActivex.RTCEventHandler(this.myActivex_ActiveXEvent);就可以处理事件了,为什么在HTML中就不行了呢?原来VB6里都可以啊。
      

  4.   

    可各位帮帮忙,我在控件中制定事件的代码大致如下:
     [Guid("D8B102E0-E92F-4191-82A1-02B92A62EA1E")]
        public class RTCEventArgs : EventArgs, IObjectSafety
        {
            // 定义消息类型为int
            private int msg;        public RTCEventArgs(int message){
                this.msg = message;
            }        public int EventMessages {
                get {
                    return this.msg;
                }
            }
            #region IObjectSafety 成员        public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
            {
                pdwSupportedOptions = 1;
                pdwEnabledOptions = 2;
            }        public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
            {
              // todo nothing
            }        #endregion
        }
    在控件类中:/*
     * 以下是事件处理
     * 
     */        public delegate void RTCEventHandler(object sender, RTCEventArgs e);        public event RTCEventHandler ActiveXEvent;        protected virtual void OnActiveXEvent(RTCEventArgs e)
            {
                if (ActiveXEvent != null)
                {
                    ActiveXEvent(this, e);
                }
            }
    在Windows应用程序中:
     this.myActivex.ActiveXEvent += new Carola.myActivex.RTCEventHandler(this.myActivex_ActiveXEvent);就可以处理事件了,为什么在HTML中就不行了呢?原来VB6里都可以啊。
      

  5.   

    同意楼上,在WINFORM中有的事件到WEBFORM中不一定有的。
    方案一:可以考虑将你要的事件写成函数,再在其他每次必定引发的事件中调用该函数;