2009-03-15 12 views
0

Windowsフォームに埋め込まれたInternet Explorerを持っていて、Web上のランダムページに移動します。テキストボックス(またはその問題のテキスト入力を受け入れることができる他のコントロール)がフォーカスされたアイテムになるのをいつどのように判断できますか?基本的には、マウスをクリックするたびに、フォーカスのあるアイテムがテキストボックスかテキスト入力用の他のコントロールであるかどうかを確認し、適切に動作するかどうかを確認できます。事前にWindowsフォームのテキストボックスにフォーカスがあるかどうかを判断する方法

おかげで、

ボブ

+0

Webブラウザーとの接続は何ですか? HTML要素やWinFormコントロールを探したいですか? –

+0

WinFormコントロール。 – Beaker

+0

あなたは答えをチェックして(古い質問を取り戻す)、新しい質問を開くと、他の答えは更新されないと意味をなさないでしょう。 – TStamper

答えて

1

は、あなたはまだWebブラウザーのロールを説明していないが、問題は入力フォーカスを追跡しているようです。フォームレベルのイベントはわかりませんが、関連するすべてのコントロールのEnterイベントまたはGotFocusイベントにイベントハンドラをフックできます。

// in Form_Load 
foreach (var control in this.Controls) control.Enter += OnEnterControl; 


private void OnEnterControl(object sender, EventArgs e) 
{ 
    focusControl = (sender as Control); 
} 
+0

私はactivex IEブラウザコントロールのハンドルを取得していますこのハンドルを使用して、プログラマチックに特定の場所をクリックするなど、ブラウザコントロールに入力を送信するために、このフォームを使用してWindowsフォームに埋め込まれます。あなたのソリューションは私のために働くかもしれません。私はそれを試してみると答えとしてそれを確認します – Beaker

+0

これはwinformコントロールでのみ動作します。これは、Webブラウザ内のMSHTMLコントロールでは機能しません。これは、OPが求めているものです。 –

+0

@jeffamaphone:OPのコメントを参照してください。 –

0

私は何がやりたいことはHTMLTextContainerEvents2ディスパッチシンクとのonFocusへの対応(および潜在的にはonBlur)であると考えています。

あなたは自分でpinvoke経由でinteropを実行する必要があるでしょう。私はあなたが(getElementsByTagNameまたはいくつかのものを使用して)追跡したいすべてのオブジェクトへのIHTMLElementポインタを取得できると仮定します。一度それがあれば、

  1. IConnectionPointContainerのIHTMLElemntを照会してください。コールバックとなりますIConnectionPoint
  2. コールIConnectionPointContainer :: FindConnectionPoint(DIID_DHTMLTextContainerEvents2)
  3. コールでIConnectionPoint ::アドバイス()ステップ2
  4. で得られそしてもちろん、あなたがにIDispatch ::呼び出しを(実装する必要があります) 。
  5. などハンドルDISPID_HTMLELEMENTEVENTS2_ONFOCUS、
+0

完了したら、切断することを忘れないでください。 –

+0

これまでは、多くの機能を実現するためにSendInputとSendMessageを使用してきました。私はIEコントロールへのハンドルを使用する答えを好むだろう。私はちょうどIEコントロールのウィンドウコントロールを操作するために探しているので、私は特別なIEオブジェクトが必要とは思わない。 – Beaker

+0

これはIEコントロールのウィンドウコントロールではありません。 MSHTMLはすべてのコントロールをレンダリングします(IE6のコンボボックスは除く)。したがって、ハンドルを持たないため、これらのコントロールにはハンドルを取得できません。 spy ++を使って検証することができます。 –

関連する問題