Как определить, имеет ли текстовое поле в форме окна фокус - PullRequest
0 голосов
/ 16 марта 2009

Допустим, у меня есть Internet Explorer, встроенный в форму Windows, и я затем перехожу на случайную страницу в Интернете. Как я могу определить, когда текстовое поле (или любой другой элемент управления, который может принимать ввод текста по этому вопросу) становится объектом в фокусе? По сути, каждый раз, когда щелкают мышью, я могу проверить, является ли элемент в фокусе текстовым полем или каким-либо другим элементом управления для ввода текста, а затем действовать соответствующим образом.

Заранее спасибо,

Bob

Ответы [ 2 ]

1 голос
/ 16 марта 2009

Вы все еще не объяснили поворот веб-браузера, но, похоже, проблема заключается в отслеживании фокуса ввода. Я не знаю о событии уровня формы, но вы можете привязать обработчик событий к событию 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 голосов
/ 16 марта 2009

Я полагаю, что вы хотите сделать, чтобы очистить интерфейс HTMLTextContainerEvents2 и ответить на onFocus (и, возможно, onBlur).

Вы правы, что вам придется делать взаимодействие через pinvoke самостоятельно. Я предполагаю, что вы можете получить указатели IHTMLElement на все объекты, которые вы хотите отслеживать (используя getElementsByTagName или что-то подобное). Как только вы это получите,

  1. Запрос IHTMLElemnt для IConnectionPointContainer .
  2. Вызовите IConnectionPointContainer :: FindConnectionPoint (DIID_DHTMLTextContainerEvents2)
  3. Вызовите IConnectionPoint :: Advise () для IConnectionPoint , полученного на шаге 2.
  4. И, конечно, вам нужно реализовать IDispatch :: Invoke (), который будет вашим обратным вызовом.
  5. Обрабатывать DISPID_HTMLELEMENTEVENTS2_ONFOCUS и т. Д.
...