HTML でいくつかのスパン要素を強調表示し、ポップアップを表示する必要があります。次のコードは強調表示を行いますが、enter イベントと leave イベントは、短時間使用すると機能しなくなります (おそらく 20 回の入場と退場)。ポップアップを追加すると、イベントはすぐに機能しなくなります - 通常は 1 回か 2 回の呼び出しの後です。例外がないため、これをデバッグする方法がわかりません。イベントの呼び出しが停止するだけです。
このコードは、次のような要素イベント ハンドラーを使用している人を見つけることができなかったので、ドキュメントから書きました: HTMLElementEvents2_onmouseenterEventHandler
このコードには「using 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";
}