Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как установить фокус на элемент в webBrowser'e? 
:(
    Опции темы
Yama
Дата 28.11.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Есть список всех HTML-тегов. Надо при выборе какого-либо тега из списка установить фокус в webBrowser'е на этот элемент. Подскажите, плз, кто знает. и, по возможности,  smile . 
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
smartov
Дата 28.11.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



Ну не все элементы могут иметь фокус, только те, в которых возможен ввод или объекты - все input, textarea например.
С ними все просто - элемент.focus()
Код

<input type="text" id="findMe" value="Text">

<script>

document.getElementById('findMe').focus();

</script>

PM MAIL   Вверх
Yama
Дата 28.11.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



smartov, это то понятно. Но как быть с теми элементами, у которых нет ID? это гиперссылки, имейджи и т.д. . Можно, конечно, присвоить всем айди, но тогда скрипты не работают smile . Если присвоить айди всем, у кого его нет - тогда можно.... но, как я говорил, у нас имеется просто набор тегов, получаемый из webBrowser1.Document.All уже не в HtmlElementCollection а, в String. Как при таком условии устанавливать фокус?

--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
smartov
Дата 29.11.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



Yama, читаем доку и находим smile
Код

var inputs = document.getElementsByTagName('input');

В inputs имеем все элементы тега input на странице. Делаем с ними все, что хочется.
PM MAIL   Вверх
Yama
Дата 29.11.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Цитата(smartov @ 29.11.2006,  00:08)
Yama, читаем доку и находим smile
Код

var inputs = document.getElementsByTagName('input');

В inputs имеем все элементы тега input на странице. Делаем с ними все, что хочется.

Эх, если бы мне были нужны только инпуты, я бы не создавал топик smile . Мне нужен фокус на ЛЮБОМ элементе в webBrowser'e. Вот как это сделать...  smile 
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
smartov
Дата 29.11.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



Yama
Цитата(Yama @  29.11.2006,  10:07 Найти цитируемый пост)
Мне нужен фокус

А луну с неба на любом элементе не надо? smile
Что ты подразумеваешь под фокусом и как тебе браузер поставит фокус на элемент <br> например ?
PM MAIL   Вверх
Yama
Дата 29.11.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Луну не надо, т.к. если упадет на землю, тут никому мало не покажется, так что пускай висит там, где есть smile . А на счет фокуса вот что я тебе скажу:
1) <td> - это контейнер для элемента, который отображается на экране, так что, по крайней мере, по теории должно давать фокус на <td>......[тут наш фокус]......</td> . 

Редактирую - на контейнеры <td>..</td> фокус действительно ставит!

2) 
Код

//присваиваем всем элементам ID + объявляем добовляем обработчик события Focusing для веббраузера
private void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            richTextBox1.Text = "webBrowser1_DocumentCompleted_1 event";
            int count = 0;
            foreach(HtmlElement el in webBrowser1.Document.All){
                if (webBrowser1.Document.All[count].Id==null)
                webBrowser1.Document.All[count].Id = webBrowser1.Document.All[count].OuterHtml;
                count++;
            };
            webBrowser1.Document.Focusing += new HtmlElementEventHandler(Document_Focusing);
        }

//собственно, сам обработчик focusing, что бы можно было наглядно посмотреть, какие на данный момент Id у элементов

        void Document_Focusing(object sender, HtmlElementEventArgs e)
        {
            richTextBox1.Text = richTextBox1.Text+"\n"+webBrowser1.Document.ActiveElement.Id + " - Id";
        }

Все работает.
Проверял сам. Только скрипты на страницах глючат, т.к. они к Id привязаны.
Если бы со скраптами проблем небыло - небыло бы и этого торика  smile 

3) Фокус на любой HTML элемент в веббраузере реализован в тестКомплите, только как - я не знаю. Поэтому изобретаю велосипед, но все-таки надеюсь, что кто-то его уже изобрел, поэтому http://forum.vingrad.ru/index.php?showtopi...st&p=939835

4 и самое важное ) Надо реализовать фокус на НТМЛ-элемент в вебБраузере НЕ ИЗМЕНЯЯ содержимое документа, т.е. НЕ переопределяя НИ ОДИН тег. 

З.Ы. а луну не трогай smile Пусть себе висит там, где есть. Она мне и так нравится smile 

Это сообщение отредактировал(а) Yama - 29.11.2006, 13:18
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
ivashkanet
Дата 29.11.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



Можно я чуть чуть влезу?
Yama, тебе нужен именно фокус, или достаточно переместить страницу к нужному элементу?
можно это скомбинировать: если для элемента возможен фокус, то фокус на него, если нет --- то просто передвигаем страницу на него.
PM MAIL WWW ICQ   Вверх
Yama
Дата 29.11.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Хммм... вариант. У webBrowser'a есть еще фокус по координатам...
если подскажешь, как сделать то, что ты сказал - будет просто замечательно smile

З.Ы. ты не влез smile . Это же форум smile))))))))))
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
ivashkanet
Дата 29.11.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



Цитата(Yama @  29.11.2006,  12:06 Найти цитируемый пост)
если подскажешь, как сделать то, что ты сказал - будет просто замечательно 

Знал бы --- сказал бы  smile 
Но с броузером не работал ни разу  smile 
Это просто были мысли.
P.S. 
Цитата(Yama @  29.11.2006,  12:06 Найти цитируемый пост)
З.Ы. ты не влез smile . Это же форум smile)))))))))) 

Да я, это  smile , просто так сказал  smile 
PM MAIL WWW ICQ   Вверх
smartov
Дата 29.11.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



Цитата(Yama @  29.11.2006,  11:49 Найти цитируемый пост)
фокус действительно ставит!

ставит фокус или перемещает (скроллит) страницу к этому месту. Ты понимаешь что это две большие разницы, как говорят в Одессе?
На счет скролла должны быть довольно нативные функции (даже у js это делается простым scrollTo); получить позицию нужного элемента думаю для тебя не трабл.
PM MAIL   Вверх
Yama
Дата 29.11.2006, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Цитата(ivashkanet @ 29.11.2006,  13:29)
Цитата(Yama @  29.11.2006,  12:06 Найти цитируемый пост)
если подскажешь, как сделать то, что ты сказал - будет просто замечательно 

Знал бы --- сказал бы  smile 
Но с броузером не работал ни разу  smile 
Это просто были мысли.

Ок! Идея хорошая. Буду развивать. 
Когда реализую фокус - выложу код.

З.Ы. За любую помощь - БОЛЬШОЕ СПАСИБО!
З.З.Ы. Одна голова хорошо, 2 - лучше, а 3 - вообще замечательно! - сказал Змей Горыныч...
З.З.З.Ы. Тааак, а почему у этого велостпеда колеса квадратные?.. Что бы по булыжникам лучше ездить было, да? Ну-ну, сейчас круглые делать будем, посмотрим, что получится...

Добавлено @ 13:46 
Цитата(smartov @ 29.11.2006,  13:42)
ставит фокус или перемещает (скроллит) страницу к этому месту. Ты понимаешь что это две большие разницы, как говорят в Одессе?
На счет скролла должны быть довольно нативные функции (даже у js это делается простым scrollTo); получить позицию нужного элемента думаю для тебя не трабл.

Хммм... на <td>..</td> действительно фокус ставит.
На счет скроллинга - спасибо за идею. еще +1. 
Если не сложно, можешь сделать пример со скроллингом?
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
smartov
Дата 29.11.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: нет
Всего: 259



Цитата(Yama @  29.11.2006,  12:43 Найти цитируемый пост)
Если не сложно, можешь сделать пример со скроллингом? 

На C# нет smile на js без проблем smile
PM MAIL   Вверх
Yama
Дата 29.11.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 2.8.2006

Репутация: нет
Всего: 2



Цитата(smartov @ 29.11.2006,  14:35)
Цитата(Yama @  29.11.2006,  12:43 Найти цитируемый пост)
Если не сложно, можешь сделать пример со скроллингом? 

На C# нет smile на js без проблем smile

давай на JS smile  А там я уже что-нибудь придумаю  smile 
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
redig
Дата 22.10.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



У меня тоже возник вопрос по установке фокуса.
Решение:

Код

public static int GetCurrFocus(WebBrowser Wb)
        {
            int foc = 0;
            if (Wb.Document != null)
            {
                HtmlElementCollection elems = Wb.Document.GetElementsByTagName("div");
                foreach (HtmlElement elem in elems)
                {
                    //Если в документе тэг div с атрибутом id один и не пустой
                    String nameStr = elem.GetAttribute("id");
                    if (nameStr != null && nameStr.Length != 0)
                    {
                        foc = elem.OffsetRectangle.Top;
                    }
                   //Или Если в документе все тэги div с атрибутом id
                   //if (nameStr == "22")
                   // {
                   //     foc = elem.OffsetRectangle.Top;
                   // }
                }
            }
            return foc;
        }

private void button1_Click(object sender, EventArgs e)
        {
            webBrowser1.Document.Body.ScrollTop = GetCurrFocus(webBrowser1);
                        
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1224 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.