如何将参数从 SHDocVw.InternetExplorer 事件传递到 C# 应用程序

How to pass a parameter from SHDocVw.InternetExplorer event to C# application

我正在使用

SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer()

有时我需要通过 Internet Explorer 在我的 C# 应用程序中触发一个事件。我是这样做的:

 var eventObj = btn.GetType()
                .GetEvents()
                .FirstOrDefault(e => e.Name == "HTMLElementEvents_Event_onclick");

            if (eventObj != null) 
                eventObj.AddEventHandler(btn, new HTMLElementEvents_onclickEventHandler(GenericDomEvent));

这工作正常,但我需要为此事件传递一些参数,但我不知道该怎么做。可能有一种方法可以从 Internet Explorer 调用 C# 方法吗?请指教

在用头撞墙几个小时后,我想出了一个解决方案。我正在使用不同的事件:

  var eventObj = btn.GetType()
                .GetEvents()
                .FirstOrDefault(e => e.Name == "HTMLElementEvents2_Event_onclick");

            if (eventObj != null) 
                eventObj.AddEventHandler(btn, new HTMLElementEvents2_onclickEventHandler(GenericDomEvent));

这是事件处理程序:

    private bool GenericDomEvent(IHTMLEventObj e)
    {            
        var element = e.srcElement;
        var command = element.title;
        var param = element.innerText;
        //Do whatever you want...
    }

本方案的思路是将数据放入DOM元素中,触发点击事件。在 C# 应用程序中,您正在监听点击事件,一旦事件引发,您就会从元素中读取数据。可能不是最优雅的解决方案,但它确实有效!