イベントハンドラーをmshtml.disphtmlinputelementに添付します
-
18-09-2019 - |
質問
私はC#でBHO(ブラウザーヘルパーオブジェクト)を書くのに忙しく、入力要素のすべてのオンクリックイベントにイベントハンドラーを添付する必要があります。 Visual Studioが提供する組み込みのWebbrowserを使用していません。代わりに、クライアントPCにインストールされているインターネットエクスプローラーの新しいインスタンスを起動しています。 IEのさまざまなバージョンを使用する場合、問題が発生します。
IE7とIE8では、このようにできることができます。
public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
HTMLInputElementClass inputElement = el as HTMLInputElementClass;
if (inputElement.IHTMLInputElement_type != "text" && InputElement.IHTMLInputElement_type != "password")
{
inputElement.HTMLButtonElementEvents_Event_onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
}
}
}
}
それは完全に機能しますが、IE6はhtmlinputelementclassにキャストするときにエラーをスローするため、disphtmlinputelementにキャストすることを余儀なくされます。
public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
DispHTMLInputElement inputElement = el as DispHTMLInputElement;
if (inputElement.type != "text" && inputElement.type != "password")
{
//attach onclick event handler here
}
}
}
}
問題は、イベントをdisphtmlinputelementオブジェクトに添付する方法を見つけることができないようです。何か案は?
解決
したがって、System_comobjectからDisphtmlinputelementオブジェクトにキャストすると、MSHTML。[イベント]インターフェイスと対話できることがわかります。したがって、IE6のイベントハンドラーを追加するコードは次のとおりです。
public void attachEventHandler(HTMLDocument doc)
{
IHTMLElementCollection els = doc.all;
foreach (IHTMLElement el in els)
{
if(el.tagName == "INPUT")
{
DispHTMLInputElement inputElement = el as DispHTMLInputElement;
if (inputElement.type != "text" && inputElement.type != "password")
{
HTMLButtonElementEvents_Event htmlButtonEvent = inputElement as HTMLButtonElementEvents_Event;
htmlButtonEvent.onclick += new HTMLButtonElementEvents_onclickEventHandler(buttonElement_HTMLButtonElementEvents_Event_onclick);
}
}
}
}
ただし、イベントハンドラーに直接インターフェイスすることができますが、Passwaordやテキストフィールドなどのタイプを除外したかったため、最初にDisphtmlinputelementにキャストする必要がありました。
所属していません StackOverflow