在IE托管的窗体控件中使用事件

问题描述:

我创建了一个可以在Internet Explorer中成功托管的窗体控件。我想给它一个事件,并能够通过JavaScript回应事件。我找到了一个关于它的链接here。它向我展示了如何创建界面,但我不确定如何从我的控制中触发事件?在IE托管的窗体控件中使用事件

这里是我的代码片段:

//Control Code: 
public class CardReader : Panel,ICardReaderEvents, ICardReaderProperties 
{ 
    public void Error() 
    { 
    } 
    public void Success() 
    { 
    } 
} 

//Interface for events 
[Guid("DD0C202B-12B4-4457-9FC6-05F88A6E8BC5")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface ICardReaderEvents 
{ 
    [DispId(0x60020000)] 
    void Error(); 

    [DispId(0x60020001)] 
    void Success(); 
} 

//Interface for public properties/methods 
public interface ICardReaderProperties 
{ 
    ... 
} 

//JavaScript to handle events 
<SCRIPT FOR="CardReader1" EVENT="Error"> 
    window.status = "Error..."; 
</SCRIPT> 

<SCRIPT FOR="CardReader1" EVENT="Success"> 
    window.alert("Success"); 
    window.status = ""; 
</SCRIPT> 

要实现它错在你的读卡器类:

public event Error; 
public event Success; 

protected void OnError() 
{ 
    if(Error != null) 
     Error(); 
} 

protected void OnSuccess() 
{ 
    if(Success != null) 
     Success(); 
} 

如果您ICardReaderEvents界面更改有错误,并成功带参数,然后就打电话给他们在OnError和OnSuccess中。

+0

谢谢。那么,事件处理程序何时设置?我检查了用户控件的Load事件并且事件处理程序仍然是空的,所以要么我没有得到正确的东西,要么还没有设置。 – Jeremy 2008-11-18 19:16:58

+0

查看我的下一个答案 – 2008-11-18 19:31:42

所以,现在你需要知道如何挂钩在Javascript中?这里是我怎么知道该怎么做的:

<object id="CR" ...></object> 

<script type="text/javascript"> 
    function CR::Error() 
    { 
    alert("Error!"); 
    } 

    function CR::Success() 
    { 
    alert("Success"); 
    } 
</script>