0

假设我在 Windows 窗体中嵌入了 Internet Explorer,然后我导航到网络上的一个随机页面。如何确定文本框(或任何其他可以接受文本输入的控件)何时成为焦点项目?基本上,每次单击鼠标时,我都可以检查焦点项目是文本框还是其他文本输入控件,然后采取适当的行动。

提前致谢,

鲍勃

4

2 回答 2

1

您还没有解释 WebBrowser 的滚动,但问题似乎在于跟踪输入焦点。我不知道表单级别的事件,但您可以将事件处理程序挂钩到所有相关控件的 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);
}
于 2009-03-16T00:08:44.670 回答
0

我相信您想要做的是接收HTMLTextContainerEvents2调度接口并响应 onFocus(可能还有 onBlur)。

没错,您必须自己通过 pinvoke 进行互操作。我假设您可以获得指向您要跟踪的所有对象的 IHTMLElement 指针(通过使用 getElementsByTagName 或类似的东西)。一旦你有了它,

  1. 在 IHTMLElemnt 中查询IConnectionPointContainer
  2. 调用 IConnectionPointContainer::FindConnectionPoint(DIID_DHTMLTextContainerEvents2)
  3. 在步骤 2 中获得的IConnectionPoint上调用 IConnectionPoint::Advise() 。
  4. 当然,您需要实现 IDispatch::Invoke() 这将是您的回调。
  5. 处理 DISPID_HTMLELEMENTEVENTS2_ONFOCUS 等。
于 2009-03-16T00:48:38.443 回答