Вкладки в GeckoFx [C#]

Заметил переходы из поисковиков по запросам «geckofx вкладки» и т.п., но такой статьи нет. Будем исправляться 🙂

Итак, в этой статье будет описан пример простенького браузера с поддержкой вкладок.
Исходники в конце статьи.

Почитать о том, как работать с GeckoFX в C# можно здесь.

Для организации поддержки вкладок потребуется компонент TabControl, в каждой вкладке этого компонента будет располагаться компонент GeckoWebBrowser.

Начнем с дизайна 🙂 Свойства формы: Name = FrmMain, WindowState = Maximized, Text = GeckoFx Tabs, Size = 457; 389, StartPosition = CenterScreen. Теперь бросаем на форму:

  • MenuStrip, добавляем пункт «Вкладки», пункту «Вкладки» добавляем подпункты «Добавить вкладку» (Name = tsmiAddTab) и «Закрыть активную вкладку» (Name = tsmiCloseActiveTab);
  • Label (Name = lblAddress, Location = 0; 24, Text = Адрес:);
  • TextBox (Name = tbUrl, Location = 3; 40, Size = 384; 20, Anchor = Top, Left, Right);
  • Button (Name = btnGo, Location = 393; 38, Size = 45; 23, Anchor = Top, Right, Text = Go);
  • TabControl (Name = tcBrowsersTabs, Location = 3; 66, Size = 435; 286, Anchor = Top, Bottom, Left, Right).

Теперь приступим к написанию кода. Думаю, комментариев, которые присутствуют в коде, достаточно 🙂

Добавим приватное поле:

Нужно оно для того, чтобы получить ссылку на вкладку, зная ссылку на контрол браузера и наоборот.

Код конструктора формы заменим на следующий:

Т.е. инициализируем движок Gecko, изменяем юзер-агент, создаем экземпляр словаря и вызываем метод добавления вкладки, который приведен ниже:

Теперь нужно реализовать обработчики событий DocumentTitleChanged, CreateWindow2 и DocumentCompleted.

Метод для закрытия вкладки:

Еще нам понадобится метод, который будет возвращать ссылку на браузер, который находится в активной вкладке:

Метод, который изменяет ссылку в TextBox на текущий URL браузера активной вкладки. Этот метод будет вызываться в момент переключения вкладок и после завершения загрузки страницы:

И, наконец, реализация следующих обработчиков: tsmiAddTab_Click (нажатие на пункт меню «Добавить вкладку»), tsmiCloseActiveTab_Click (нажатие на пункт меню «Закрыть активную вкладку»), btnGo_Click (нажатие на кнопку «Go»), tcBrowsersTabs_SelectedIndexChanged (изменения индекса активной вкладки, т.к. когда пользователь переключается на другую вкладку):

Должно получиться что-то типа такого:
GeckoFxTabsНа этом всё 🙂 Спасибо за внимание.
Вопросы можно задать в комментариях.

Исходники (GitHub)

Запись опубликована в рубрике Статьи по C# с метками , , , . Добавьте в закладки постоянную ссылку.

8 комментариев на «Вкладки в GeckoFx [C#]»

  1. Aleksandr говорит:

    Все супер!!! Вот только как сделать авторизацию Proxy по логину и паролю?
    Невыводится на экран, окно авторизация Basic!
    У версиях gecko 10 — работает все нормально а вот с версий 22 и выше окно авторизации прокси не выводится(

    Автоматически авторизироватся не получается(
    Помогите решить проблему. Спасибо..

    • admin говорит:

      На счет прокси — хз, нужно будет ковырнуть.
      П.С. Что-то ваш комментарий посчитали спамом, потому так долго ответа не было.

    • admin говорит:

      Только что проверил — окно авторизации выводиться без проблем.

  2. Aleksandr говорит:

    Здравствуйте еще рас, спасибо за ответ. А можно узнать как Вы настроились на прокси? У меня так и нечего не получилось! В ранних версиях все работает. В новых окно не выскакивает(
    Свяжитесь со мной пожалуйста по почте, для обмена новых идей программирования). Спасибо..

    • admin говорит:

      Вот так:
      var proxy = new Uri( "http://localhost:8080" );
      GeckoPreferences.User[ "network.proxy.http" ] = proxy.Host;
      GeckoPreferences.User[ "network.proxy.http_port" ] = proxy.Port;
      GeckoPreferences.User[ "network.proxy.ssl" ] = proxy.Host;
      GeckoPreferences.User[ "network.proxy.ssl_port" ] = proxy.Port;
      GeckoPreferences.User[ "network.proxy.type" ] = 1;

      На мыло отправил исходник.
      P.S. Т.к. не нашел бесплатных прокси с логином и паролем, то подымал локальный с помощью HandyCache.

  3. Aleksandr говорит:

    Да все работает у вашем исходнике, ща буду разбиратся в чем может быть прикол. Спасибо..
    Я отправил Вам письмо, прочтите пожалуйста..

  4. Денис говорит:

    Доброе утро. Не подскажите как сделать чтоб при переходе из поисковика добавлялась новая вкладка, а не открывался сайт в тойже вкладке.

    • admin говорит:

      Есть событие у браузера «Navigating», вот в нем смотреть и открывать новую вкладку при необходимости.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *