2015-06-04 3 views
2

Я не могу запустить событие «onchange» в mshtml. Не могли бы вы рассказать мне, что я делаю неправильно здесь.mshtml fireevent onchange not firing

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

Может ли кто-нибудь помочь мне с этим.

Спасибо, Sam

ответ

1

Я пробовал все те, о которых Шэн упомянул, но не работал.

Эта проблема была решена путем ввода кода javascript для «onchange» и его выполнения. Это сработало.

1

выполнение Callable Wrapper объекты генерируются COM вызовов, такие как HTMLDocument.all.item может перевести интерфейс литье на QueryInterface вызовов. Но RCW не знает, как преобразовать в управляемый класс, такой как HTMLSelectElementClass, таким образом он возвращает null.

Вместо того, чтобы кастовать в HTMLSelectElementClass, отсылать к IHTMLElement3 для вызова fireEvent.

Кстати, ваш код не работает в режиме IE11, поскольку document.all устарел. Вместо этого используйте IHTMLDocument3 :: getElementById.