【问题标题】:Using events in IE hosted windows form controls在 IE 托管的 Windows 窗体控件中使用事件
【发布时间】:2008-11-18 17:36:17
【问题描述】:

我创建了一个 Windows 窗体控件,它成功地托管在 Internet Explorer 中。我想给它一个事件并能够通过 javascript 响应事件。我找到了一个讨论它的链接here。它向我展示了如何创建接口,但我不确定如何从我的控件中触发事件?

这是我的代码 sn-pS:

//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>

【问题讨论】:

    标签: c# .net winforms internet-explorer


    【解决方案1】:

    您在 CardReader 类中实现错误:

    public event Error;
    public event Success;
    
    protected void OnError()
    {
        if(Error != null)
            Error();
    }
    
    protected void OnSuccess()
    {
        if(Success != null)
            Success();
    }
    

    如果您的 ICardReaderEvents 接口更改为 Error 和 Success 带参数,则只需在 OnError 和 OnSuccess 中调用它们。

    【讨论】:

    • 谢谢。那么什么时候设置事件处理程序呢?我已经检查了用户控件的 Load 事件,并且事件处理程序仍然为空,所以要么我没有得到正确的连接,要么它还没有设置。
    【解决方案2】:

    那么,现在您需要知道如何在 Javascript 中挂钩它吗?以下是我知道的方法:

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

    【讨论】:

    • 感谢所有帮助。我得到一个对象未​​定义的 CR。
    • 您的对象 ID 是否设置为 CR?对象加载是否正确?我有一个错字……它应该是 CR::Success(),而不是 CR:Success()。现在编辑它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多