![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Привет!
Надо отображать html на форме. Для этого взял Webbrowser, поместил на форму. Т.к. текст хтмл берется извне, то вывожу его так:
Это правильно или через "Ж"? И ещё один вопрос. В хтмл-е есть ссылки. По нажатию на ссылку в этом же окне браузера открывается другая страница. А я хочу, чтобы по нажатию на ссылку новая страница открывалась в браузере по умолчанию, т.к. в данном случае Webbrowser использую только для того, что бы отобразить хтмл. Такое можно сделать? |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Поведение страницы при использовании разных способов загрузки может отличаться. Помимо указанного способа можно грузить страницу методом Navigate, если она существует в виде файла на компьютере или в сети. Если страница есть только в виде текста. То можно передать ее свойству DocumentText(при этом способе некоторые функции могут не работать). Или скажем можно воспользоваться свойством DocumentStream. При использовании метода Write, могут возникать неожиданные эффекты, например внезапно откроется браузер. Насколько я помню этот метод надо использовать совместно с OpenNew. Ну можно, к примеру для ссылок установить атрибут target (хотя в этом случае открыться может ИЕ). Не очень элегантное решение, но заставить его худо-бедно работать таки можно. Можно прибегнуть и к более изощренным методам, например повесить на ссылки обработчики клика и выполнять открытие программно. В общем и целом, красивого решения у меня нет, но изловчиться можно. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Страницы физически нету. Поэкспериментирую, спасибо! Почему я использую Write? Потому нашел только такой способ Только что проверил, открывается ИЕ.
Это на джаваскрипт уже все делается? Или как-то можно обработчик клика по ссылке на C#-е подвесить и обработать? У меня ещё был вопросик насчет отображения html. В общем, когда я начал искать информацию по работе с браузером, то почти везде используется метод Navigate. Но т.к. страницы физически нету и хтмл код генерируется на лету, то я искал способ в обход Navigate-а. Но я себе думал, что если такого не найду, то возможно, сделаю сохранение хтмл страницы где-то и потом её отображу через Navigate. Так вот вопрос: что лучше в моем случае, отображать хтмл код примерно как это делается сйечас, либо сгенерировать хтмл страничку, сохранить её где-то и отображать через Navigate> |
|||
|
||||
| diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Метода Write у браузера тоже нет, но ты ведь нашел. Может там же поискать? Ну это логично. Вряд ли с яваскрипта получится запустить браузер по умолчанию.
Проще всего так http://msdn.microsoft.com/query/dev11.quer...r-.NETFramework Правда докопаться до элемента-источника события без доступа к ком-объектам все равно не получится. Можно еще подключить mshtml для более полноценной работы с документом, а можно обойтись dynamic. В последнем случае, для получения адреса ссылки, по которой был выполнен клик вроде работает следующий код, написанный в обработчике
Сохранение страницы во временный файл - вполне нормальная практика, такой подход используется, к примеру, локальной версие msdn(все просмотренные страницы ты можешь обнаружить в папке TEMP). При использовании Navigate страница ведет себя как в браузере, если использовать тот же DocumentText, то, насколько я помню, у тебя даже доступа к DOM не будет и ты все описанное выше будет недоступно. Хотя в случае с Write, по всей видимости, этой проблемы быть не должно( я не пользовался этим способом), тем не менее могут возникнуть другие проблемы, которые возникают при использовании mshtml, в частности, как я уже сказал, при записи некоторых страниц внезапно может открыться окно браузера или еще что-то в этом роде, хотя при использовании open, эта проблема вроде как решается, поэтому я и посоветовал Write без OpenNew не использовать, все-таки эти методы - не более чем оболочки соответствующих методов mshtml.HTMLDocument -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||
|
|||||||
| V0fka |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Понял Насчет всего остального цитировать отдельно не буду, опишу в общем. Раз сохранение и отображение файла - это нормальная практика, то я пока сделал именно так. В результате у меня даже получилось на ссылки навесить обработчики события. Но тут появились 2 проблемы: 1) Обработчики я навешиваю обходя коллекцию HTML элементов, полученных GetElementsByTagName("a"). Так вот, сразу после того, как отображается хтмл страница
метод GetElementsByTagName("a") возвращает 0 элементов. Но если я его вызову сразу после этого, но по нажатию кнопки - все ок. Попробовал в событии DocumentCompleted, но там тоже возвращает 0 элементов. Где это все правильно сделать? 2) Как я написал выше, худо-бедно (по нажатию дополнительной кнопки) обработчики навешиваются. Сигнатура метода-обработчика такая: OnclickLink(object sender, EventArgs e). При нажатии на ссылку я попадаю в него, но в результате sender = null, а в e ничего нету, кроме члена Empty. Пробую, как ты пишешь выше
но студия ругается на свойство event "Требуется идентификатор, event является ключевым словом". ПС. Я вот думаю, может все это делать не через html, а через ListBox? Можно ведь какие-то симпотичные ListBox-ы делать? |
||||||
|
|||||||
| diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Это надо делать в обработчике события DocumentCompleted. Желательно так же еще проверять свойство ReadyState.
Либо как уже сказал свойство проверь, либо можешь еще событие Navigated покурить.
Тогда собачку поставь вначале слова. Это особенности шарповского компилятора.
Лучшим решением было бы использовать документы WPF, но если принципиально, чтобы приложение было именно винформовским, то листбоксы тут не особенно подходят, все-таки функционал у них слабенький. Хотя тоже от задачи зависит. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||
|
|||||||
| V0fka |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Да не, не принципиально. Не шарю просто, решил в windows forms. Но раз такое дело, буду пробовать на WPF что-то на###кодить |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Эммм, ну там изучать придется все это дело. В принципе можно и в браузере разобраться. Добавлено через 7 минут и 5 секунд Кстати ничто не мешает в винформ-приложении захостить на форму какой-нибудь документвьюер из впф. Браузер - все-таки штука трудноконтролируемая, а объектная модель документа в впф - вещь достаточно простая и удобная. Короче говоря: выбор есть. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| V0fka |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 311 Регистрация: 5.11.2006 Где: Украина Репутация: нет Всего: нет |
Ну а шо делать?
Та это ж шарить надо... |
||||
|
|||||
| irinazanuda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 911 Регистрация: 23.6.2010 Репутация: нет Всего: 18 |
Поняла))) Не туда написала((
Это сообщение отредактировал(а) irinazanuda - 30.6.2013, 07:09 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |