.Focus() на HTML элементе мешает работе с интерфейсом прилож

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

euroflock
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 26.02.2009 (Чт) 12:54

.Focus() на HTML элементе мешает работе с интерфейсом прилож

Сообщение euroflock » 12.04.2009 (Вс) 11:25

Ситуация: приложение (при работе в любом из режимов: однопоточное, псевдо-мультипоточное или многопоточное) выполняет определённые дествия с загруженной в браузер страницей, одним из которых (действием) является создание из необходимого элемента страницы активного элемента WebBrowser.Document.ActiveElement путём установки на нём фокуса myHtmlElement.Focus() с целью произведения последующих действий, отталкиваясь от элемента, на котором установлен фокус...

Во время работы программы (в процессе обработки сайтов) получается, что каждый вызов myHtmlElement.Focus() перехватывает фокус на себя а, соответственно, "мешает" работать с интерфейсом программы: нет нормальной возможности набирать текст, заполнять поля данными и т.п.

1. Существует ли возможность в браузере сделать элемент активным без у становки на него фокуса?

2. Каким программным способом можно получить следующий за текущим элемент на странице (или предыдущий), способный получить фокус (аналог нажатия "TAB" на клавиатуре при навигации по сайту), не у станавливая при этом на нём фокус?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: .Focus() на HTML элементе мешает работе с интерфейсом прилож

Сообщение MIT » 12.04.2009 (Вс) 11:29

euroflock писал(а):1. Существует ли возможность в браузере сделать элемент активным без у становки на него фокуса?
Записываешь куда-нибудь данные о том, у кого сейчас находится фокус, передаешь его (фокус) браузеру, делаешь все что надо и возвращаешь фокус контролу.
euroflock писал(а):2. Каким программным способом можно получить следующий за текущим элемент на странице (или предыдущий), способный получить фокус (аналог нажатия "TAB" на клавиатуре при навигации по сайту), не у станавливая при этом на нём фокус?
Примерно таким же: отлавливать нажатие ТАБа и передавать его браузеру

Ну это так, на вскидку.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

euroflock
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 26.02.2009 (Чт) 12:54

Re: .Focus() на HTML элементе мешает работе с интерфейсом прилож

Сообщение euroflock » 12.04.2009 (Вс) 11:57

MIT писал(а):
euroflock писал(а):1. Существует ли возможность в браузере сделать элемент активным без у становки на него фокуса?
Записываешь куда-нибудь данные о том, у кого сейчас находится фокус, передаешь его (фокус) браузеру, делаешь все что надо и возвращаешь фокус контролу.
euroflock писал(а):2. Каким программным способом можно получить следующий за текущим элемент на странице (или предыдущий), способный получить фокус (аналог нажатия "TAB" на клавиатуре при навигации по сайту), не у станавливая при этом на нём фокус?
Примерно таким же: отлавливать нажатие ТАБа и передавать его браузеру
Ну это так, на вскидку.


Что-то тут не так... Вероятнее всего "сделать элемент активным без у становки на него фокуса" не получится, т.к. активным элемент считается тот, на котором установлен фокус... вопрос поставлен некорректно. В этом случае первый вопрос отпадёт, если найдётся ответ на второй вопрос.

Примерно таким же: отлавливать нажатие ТАБа и передавать его браузеру


Это не совсем то, что необходимо. Я указал ТАБ как аналог перевода фокуса юзером между отображенными на странице элементами, но мне нужно другое: любые элементы я могу получить программно через WebBrowser.Document.GetElementById, или .GetElementByTagName, затем могу найти в этой коллекции исходный (который буду считать "активным", без установки на нём фокуса).

Уточню второй вопрос:
2. Каким программным способом можно получить следующий за текущим элемент на странице (или предыдущий), способный получить фокус? Понятно, что в коллекции отобранных элементов из вэбдокумента, элементы находятся по порядку на своих местах, но .GetElementById и .GetElementByTagName не дают мне полного списка элементов в порядке перехода между ними фокуса типа .GetElementWhichCanTakeFocus или .GetElementByTabIndex

euroflock
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 26.02.2009 (Чт) 12:54

Re: .Focus() на HTML элементе мешает работе с интерфейсом прилож

Сообщение euroflock » 12.04.2009 (Вс) 13:08

... пока кто-нибудь подскажет более правильных выход, я использую переменную myActiveElement типа HtmlElement, а для перехода между элементами планирую использовать их .TabIndex...


.TabIndex не работает, т.к. почти всегда равно 0. Буду пытаться манипулировать через уникальный номер элемента ..mshtml.DomElement.UniqueNumber

.UniqueNumber также не работает правильно. Нашёл специфический номер каждого элемента на странице: ..mshtml.DomElement.sourceIndex

euroflock
Обычный пользователь
Обычный пользователь
 
Сообщения: 68
Зарегистрирован: 26.02.2009 (Чт) 12:54

Re: .Focus() на HTML элементе мешает работе с интерфейсом прилож

Сообщение euroflock » 13.04.2009 (Пн) 11:16

Вопрос решён:
Программно следующий элемент на странице (из чила способных получить фокус) выбираю из коллекции WebBrowser.Document.All по индексу, следующему за текущим ..mshtml.DomElement.sourceIndex, проверяя при этом TagName. Предыдущий нахожу аналогично следующему, но в обратную сторону.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList