うわ

doc = (mshtml.HTMLDocument)axWebBrowser1.Document;
mshtml.HTMLDocumentEvents2_Event iEvent;
iEvent = (mshtml.HTMLDocumentEvents2_Event) doc;

これなんか凄い気持ち悪いんですけど、あれでしょうか。同じオブジェクトをdocumentとeventにキャストしてる??多重継承?があるからこうなってしまうんでしょうか。多重継承がある言語って少しも触った事が無いです。最近疑問符がやたら多いのは、かなり的外れ(当を得てない)ことを言ってる自覚があるので、そのための心理的予防線です。若者言葉の語尾上げ風に読んでください。ていうか?みたいな?つか、まじで、凄い若い文章を書くと思いますね。僕は。
Geckoの方も、AxMozillaBrowser::Documentで、AxWebBrowser::Documentと互換性のあるオブジェクトを返してくるって事だったんで、入れ替えてやってみたところコンパイルも通るし、実行時のエラーは出ないけれど、イベントは全然実装されていないらしく全く取れませんでした。これを使ってる場合はそのまま置き換えるのは無理みたい。
AxWebBrowserの方もクリックイベントを取ってしまうと、リンクをクリックしてもリンクを辿れなくなるので、一日たってかなり後退した感じ。