在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中。
答
所以,现在你需要知道如何挂钩在Javascript中?这里是我怎么知道该怎么做的:
<object id="CR" ...></object>
<script type="text/javascript">
function CR::Error()
{
alert("Error!");
}
function CR::Success()
{
alert("Success");
}
</script>
谢谢。那么,事件处理程序何时设置?我检查了用户控件的Load事件并且事件处理程序仍然是空的,所以要么我没有得到正确的东西,要么还没有设置。 – Jeremy 2008-11-18 19:16:58
查看我的下一个答案 – 2008-11-18 19:31:42