mshtml fireevent onchange没有开火

时间:2015-06-04 10:23:47

标签: mshtml microsoft.mshtml

我无法在mshtml中触发“onchange”事件。你能告诉我这里我做错了吗。

HTMLSelectElement element = (HTMLSelectElement)this.HTMLDocument.all.item(controlId, 0);
IHTMLElement e = element as IHTMLElement;
IHTMLDocument4 doc = e.document as IHTMLDocument4;
object dummy = null;
object eventObj = doc.CreateEventObject(ref dummy);
HTMLSelectElementClass se = element as HTMLSelectElementClass;
se.FireEvent("onchange", ref eventObj);

我将变量“se”变为null。我从另一个链接http://www.itwriting.com/phorum/read.php?3,1507

获得了这段代码

任何人都可以帮助我。

谢谢, 萨姆

2 个答案:

答案 0 :(得分:1)

由COM调用(如HTMLDocument.all.item)生成的运行时可调用包装器对象可以将接口转换转换为QueryInterface调用。但是RCW不知道如何转换为像HTMLSelectElementClass这样的托管类,因此它返回null。

不是强制转换为HTMLSelectElementClass,而是强制转换为IHTMLElement3来调用fireEvent。

顺便说一句,您的代码在IE11模式下不起作用,因为不推荐使用document.all。改为使用IHTMLDocument3 :: getElementById。

答案 1 :(得分:1)

我曾尝试过盛所提到的但没有奏效的所有人。

通过为“onchange”注入javascript代码并执行它来解决此问题。它奏效了。