如何确定Windows窗体中的文本框是否具有焦点

时间:2009-03-15 21:13:31

标签: c# internet-explorer forms textbox focus

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

提前致谢,

鲍勃

2 个答案:

答案 0 :(得分:1)

你仍然没有解释WebBrowser的滚动,但问题似乎是跟踪输入焦点。我不知道Form级别事件,但您可以将事件处理程序挂钩到所有相关控件的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);
}

答案 1 :(得分:0)

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

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

  1. 查询IConnectionPointContainer
  2. 的IHTMLElemnt
  3. 调用IConnectionPointContainer :: FindConnectionPoint(DIID_DHTMLTextContainerEvents2)
  4. 在步骤2中获取的IConnectionPoint上调用IConnectionPoint :: Advise()。
  5. 当然,您需要实现IDispatch :: Invoke(),这将是您的回调。
  6. 处理DISPID_HTMLELEMENTEVENTS2_ONFOCUS等