我用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 应用程序就可以。请高手帮忙,谢谢!困扰我两三天了已经。
<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 应用程序就可以。请高手帮忙,谢谢!困扰我两三天了已经。
[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里都可以啊。
[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里都可以啊。
[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里都可以啊。
方案一:可以考虑将你要的事件写成函数,再在其他每次必定引发的事件中调用该函数;