我看到与此相关的SO上已经有几个问题,但我认为我是十分不同不被视为重复(如果我错了,让我知道)。
我有我写在C#中的ActiveX控件,虽然我有它主要的工作,我希望它被点击时在JavaScript中引发一个事件(它会显示一个图像,它的网页上的视觉元素)。
什么我期待实现的最终目标是没有什么不同,如果它是一个<span>
标签,它有一个onclick
事件,以提高JavaScript函数被点击的标签的区域时。
大部分我读过的东西就可以进入上如何处理ActiveX控件的事件和发送信息前/后非常精细的细节,这很好,但似乎过于复杂。 我不是在寻找与ActiveX控件进行沟通,我只需要一个JavaScript函数来火了,当我点击它,在类似的方式<span>
或<div>
标记。 我可以处理一切在JavaScript东西。 简单地包裹在控制<span>
或<div>
用onclick
事件没有任何影响- ActiveX控件几乎覆盖它。
有一个简单的方法来处理这对于用C#编写ActiveX控件?
我想将它的另一种方式 - 我与第三方控制工作,我们必须使用类似下面的代码来获得它通过JavaScript我们的HTML网页通信
<script type="text/javascript" event="OnMouseClick(index)" for="AXObjectName">
<!--
AXObjectName_OnMouseClick(index);
//-->
</script>
凡AXObjectName
是控件的名称/ ID和AXObjectName_OnMouseClick
是JavaScript函数会在我的代码火的名字,传递一个index
参数。 然而,什么都做我必须做的设立等的方法OnMouseClick
在控制? 如果我不想传递任何实际信息(即无index
)我连这样走多远?
的ActiveX事件通过COM处理,所以你需要深入研究在那里有点不幸 。
与COM需要记住的是,一切都通过接口来处理,所以你通常需要创建两个接口,一个用于任何属性,一个用于您的活动。
事件的关键是标识类用ComSourceInterfaces属性,它是由MSDN描述为“标识的被暴露作为归结类COM事件源接口的列表。”
这个简单的类结构应该为你工作(这对我来说过去)。
namespace MyActiveX
{
[Guid("Your-GUID") ,InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IActiveXEvents
{
[DispId(1)]
void OnMouseClick(int index);
}
[Guid("Another-GUID"),InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IActiveX
{
//[DispId(1)]
// Any properties you want here like this
// string aProperty { get; set; }
}
[ComVisible(true)]
[Guid("Yet-Another-GUID"), ClassInterface(ClassInterfaceType.None)]
[ProgId("MyActiveX")]
[ComSourceInterfaces(typeof(IActiveXEvents))]
public partial class MyActiveX : UserControl, IActiveX
{
public delegate void OnMouseClickHandler(int index);
public event OnMouseClickHandler OnMouseClick;
// Dummy Method to use when firing the event
private void MyActiveX_nMouseClick(int index)
{
}
public MyActiveX()
{
InitializeComponent();
// Bind event
this.OnMouseClick = new OnMouseClickHandler(this.MyActiveX_MouseClick)
}
public void FireTheEvent()
{
int index = -1;
this.OnMouseClick(index);
}
}
}
如果你不需要任何属性你可以排除IActiveX接口。 此外,如果你打算使用Click事件,您需要将其标记为新将它传递给COM。
文章来源: How can I make an ActiveX control written with C# raise events in JavaScript when clicked?