我需要在我的 html 中突出显示一些 span 元素并显示一个弹出窗口。以下代码进行了突出显示,但进入和离开事件在使用短时间后停止工作(可能 20 次进入和离开)。如果我添加弹出窗口,事件将很快停止工作 - 通常只需要一两个电话。我不知道如何调试它,因为没有例外,事件只是停止被调用。
我从文档中编写了这段代码,因为我找不到任何人使用这样的元素事件处理程序:HTMLElementEvents2_onmouseenterEventHandler
请注意,此代码需要“使用 mshtml;” 以及对 COM 'Microsoft HTML object library' 的引用
void mBrowser_LoadCompleted(object sender, EventArgs e)
{
Debug.WriteLine("LoadCompleted");
var doc = (IHTMLDocument2)mBrowser.Document;
foreach (IHTMLElement elem in doc.all)
{
if (elem.tagName == "SPAN")
{
mshtml.HTMLElementEvents2_Event iEvt;
iEvt = (HTMLElementEvents2_Event)elem;
iEvt.onmouseenter += new HTMLElementEvents2_onmouseenterEventHandler(onMouseEnter);
iEvt.onmouseleave += new HTMLElementEvents2_onmouseleaveEventHandler(onMouseLeave);
//iEvt.onmouseover += new HTMLElementEvents2_onmouseoverEventHandler(onMouseOver);
Debug.WriteLine("span: " + elem.innerHTML);
}
}
}
void onMouseEnter(mshtml.IHTMLEventObj e)
{
Debug.WriteLine(" mouse enter! " + e.srcElement.innerHTML);
//mPopup.IsOpen = true;
//mPopup.HorizontalOffset = e.x;
//mPopup.VerticalOffset = e.y;
e.srcElement.style.backgroundColor = "#CCCCCC";
}
void onMouseLeave(mshtml.IHTMLEventObj e)
{
//mPopup.IsOpen = false;
Debug.WriteLine(" mouse leave! " + e.srcElement.innerHTML);
e.srcElement.style.backgroundColor = "#FFFFFF";
}