Przeglądarka internetowa w C#

Przeglądarka internetowa w C#

Autor: Marcin Hałaczkiewicz

Opublikowano: 5/2/2007, 12:00 AM

Liczba odsłon: 82067

W dzisiejszym artykule zajmiemy się prostą internetową przeglądarką. Napiszemy ją wykorzystując kontrolkę WebBrowser, w której to Microsoft obudował element COM wykorzystywany przez Internet Explorera. Wyposażymy ją również w podstawowe funkcje, czyli przyciski Wstecz, Dalej, Odśwież i Stop. W przyszłości pomyślimy również nad dalszym rozbudowaniem naszego programiku.

Zaczynamy oczywiście od utworzenia nowego projektu oraz nazwania go Przegladarka. We właściwości Text automatycznie utworzonej formy wpisujemy Brak strony. Następnie dodajemy z toolboxa kontrolkę TextBox oraz 5 kontrolek Button. Pole tekstowe nazywamy txtAdres - posłuży nam ono do wpisywania adresu strony. Przyciskom nadajemy kolejno nazwy: cmdOK, cmdWstecz, cmdDalej, cmdOdswiez i cmdStop. We właściwościach Text każdego z nich wpisujemy w tej samej kolejności co poprzednio: OK, <, >, Odśwież, Stop. Dodatkowo dla cmdWstecz i cmdDalej ustawiamy Enabled na false - będziemy "ręcznie" aktywować te przyciski w trakcie pracy programu. Musimy jeszcze dodać Panel, w którym umieścimy właściwy "element przeglądający", czyli WebBrowser. Dle panelu ustawiamy właściwość Anchor na Top, Bottom, Left, Right. Dzięki temu podczas rozszerzania okna programu, okno przeglądarki również odpowiednio się rozszerzy. Gdy mamy już panel, zaglądamy do toolboxa. Pod zakładką Common Controls kryje się poszukiwana przez nas kontrolka. Wybieramy ją i umieszczamy wewnątrz panelu, sama wypełni całą jego powierzchnię. Jeszcze tylko zmieńmy jej nazwę na przegladarka i możemy iść dalej.

Ustawmy wszystkie elementy, aby okno programu wyglądało mniej więcej tak:

Oprogramujmy teraz przycisk cmdOK. Będzie on oczywiście służył do przechodzenia pod wpisany przez nas adres. Klikamy na nim 2 razy i wewnątrz nowo utworzonej funkcji wpisujemy:

string adres = txtAdres.Text;
przegladarka.Navigate(adres);

Metoda Navigate klasy WebBrowser, jak łatwo się domyśleć, przechodzi na podaną przez nas w adresie stronę. Jeśli adres będzie niepoprawny, wyświetli się znany z Internet Explorera komunikat:

Chcielibyśmy, aby strona wyświetlała się również po wciśnięciu klawisza enter. W tym celu tworzymy zdarzenie KeyPress dla pola tekstowego txtAdres i w jego wnętrzu wpisujemy:

if (e.KeyChar == (char)13)
{
    string adres = txtAdres.Text;
    przegladarka.Navigate(adres);
}

Funkcja sprawdza czy został naciśnięty enter (kod 13 w ASCII). Jeśli tak to działa dokładnie tak samo jak kliknięcie OK. W tym momencie nasz programik ma już podstawową funkcję przeglądarki internetowej - potrafi wyświetlić stronę. Zauważmy, że w standardowej przeglądarce (jak Internet Explorer) wpisujemy np. centrumxp.pl, a po chwili w polu adresu zobaczymy http://www.centrumxp.pl/default.aspx. Ponadto strony mają tytuł, który również powinien być gdzieś widoczny. Sprawmy by nasz program posiadał te funkcje. W tym celu tworzymy zdarzenie Navigated dla kontrolki przegladarka (czyli klikamy w jej właściwościach na żółty piorunek i wybieramy odpowiednie zdarzenie). Wywołuje się ono gdy nawigacja zostanie zakończona. We wnętrzu funkcji wpisujemy:

txtAdres.Text = przegladarka.Url.ToString();
this.Text = przegladarka.DocumentTitle;
if (przegladarka.CanGoBack)
    cmdWstecz.Enabled = true;
else cmdWstecz.Enabled = false;
if (przegladarka.CanGoForward)
    cmdDalej.Enabled = true;
else cmdDalej.Enabled = false;

Adres strony, która jest aktualnie wyświetlana ukryty jest w polu Url, jej tytuł w DocumentTitle. Kontrolka WebBrowser "wie" także, czy może iść wstecz lub dalej. Są to właściwości typu bool o nazwach CanGoBack i CanGoForward. W zależności od ich wartości uaktywniamy lub dezaktywujemy przyciski cmdWstecz i cmdDalej.

Pozostało nam jeszcze kilka przycisków. Klikamy 2 razy na cmdWstecz i wpisujemy:

przegladarka.GoBack();

Teraz podwójne kliknięcie na cmdDalej i wewnątrz funkcji umieszczamy linijkę:

przegladarka.GoForward();

WebBrowser posiada wbudowane funkcje do cofania się i przechodzenia dalej, więc nie trzeba ich samemu pisać. Podobnie jest z funkcjami Odśwież i Stop. Dla przycisku cmdOdswiez będzie to kod:

przegladarka.Refresh();

A dla cmdStop:

przegladarka.Stop();

Tak oto napisaliśmy prostą przeglądarkę internetową. Niestety nie jest ona pozbawiona wad. Dla przykładu: wejdźmy na jakąś stronkę i kliknijmy w okno przeglądarki, następnie wybierzmy dowolny link, klikamy prawym przyciskiem i wybieramy otwórz w nowym oknie. Strona otworzy się w Internet Explorerze. Działają również skróty z IE - np. [CTRL + N]. Niestety pozbycie się tych uniedogodnień jest niezwykle trudne i znacznie wykracza poza ramy tego artykułu. Cieszmy się tym co mamy ;) Pozostaje jedynie niedosyt oraz żal do Microsoftu, że nie udostępnił metod, które pozwalałyby pozbyć się tych problemów. Jak widać prostą przeglądarkę napisać bardzo łatwo, jednak brak jej prawdziwej funkcjonalności. Minus dla Microsoftu za kontrolkę WebBrowser.