Przeglądarka internetowa w C#
Autor:
Marcin Hałaczkiewicz
Opublikowano:
2 maja 2007
Odsłon:
48 255
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.

Komentarze
Super
lol,
26 maja 2007, 15:12
Jest super prosze o wiecej bajerkow do tej przegladareczki :>
VS,
7 czerwca 2007, 18:56
A czy nie można by dać jakiegoś przykładu, bo robie wszystko zgodnie z instrukcjami i nie moge zrobić żeby można było enterem włączać strone!!!
Traker,
6 lipca 2007, 11:03
VS:
>Jest super prosze o wiecej bajerkow do tej preglaareczki :>
a więc proszę: do przejścia na stronę główną: przegladarka.GoHome;
ja się na tym zbyt nie znam i może nie działać :/
Mały Programista,
12 lipca 2007, 21:30
Właśnie.... coś z enterem jest nie tak wpisuje ten kod do " txtAdres " i wyskakuje błąd :
" "System.EventArgs" does not contain a definition for "KeyChar" "
O co chodzi ??
Lord500,
8 sierpnia 2007, 15:46
A jaką wersję Visual C# masz?
Programista,
12 sierpnia 2007, 13:01
@up 2005 express edition
Traker,
13 sierpnia 2007, 16:00
Ja mam Microsoft Visual C# 2005 Express Edition.... coś może z kodem albo z wersja C# cos jest nie tak....
Lord500,
19 sierpnia 2007, 21:46
wszystko działa ;">
trzeba zrobić tylko events KeyPress dla TxtAdres i ma być taki kod:
private void TxtAdres_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
{
this.webBrowser1.Navigate(this.TxtAdres.Text);
}
}
boss,
20 sierpnia 2007, 21:22
Sorki, ja jestem początkującym informatykiem... mógłbyś wyrażać sie jaśniej ?? Bo niewiem co to jest events KeyPress :P
Lord500,
24 sierpnia 2007, 13:38
Aha... czy ktoś wie jak zrobić "ProgressBar" tak aby działał w przeglądarce i pokazywał tak jak np. w Firefoksie ?? I jeszcze jedno, jak zrobić tak, aby po przyciśnięciu np. Buttonu wyskakiwało drugie okno, lub tak aby wyskakiwalo w tym samym oknie ??
Lord500,
24 sierpnia 2007, 15:17
To ktoś odpowie na Lord-a pytania ? Bo ja też jestem ciekawy
Kamikaze,
9 września 2007, 01:19
Wiem, że to troczę nie na temat, ale jak zrobić klienta pocztwego coś jak Outlook
bart,
28 października 2007, 19:19
Mi to wcale nie działa :( Dochodze do "Przyciskow" np. Wstecz klikam 2 razy i otwiera mi na czyms takim:
private: System::Void cmdWstecz_Click(System::Object^ sender, System::EventArgs^ e)
{
}
gdy umieszcze w { } kod np.
string adres = txtAdres.Text;
przegladarka.Navigate(adres);
lub zwyczajnie przegladarka.GoForward(); wywala mi error , dodam ze mam Visual C++ 2995 Expres Edition
steelq;s,
2 listopada 2007, 16:22
Witam, dzięki dzięki Centrum XP napisałem program, przeglądarke w języku C# i stronke : www.mu24.go.pl <---- polecam :">
Lord500,
11 listopada 2007, 22:41
mam:
private void TxtAdres_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == (char)13)
{
this.przegladarka.Navigate(this.txtAdres.Text);
}
}
i również ni działa...
kkuba,
17 listopada 2007, 00:05
ja mam tak i dzila:
private void txtAdres_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar==(char)13)
{
string adres = txtAdres.Text;
Przegladarka.Navigate(adres);
}
}
Midaw,
13 grudnia 2007, 21:35
Witam ponownie :D Mam pytanie... jak zrobić tak, aby button otwierał Form ?? Wiem że na pewno jest taka komenda ale nie wiem jaka ....:/
Lord500,
28 grudnia 2007, 19:00
Ok, już wiem, ale na forum Centrum XP pisze to niedokładnie :/
Lord500,
29 grudnia 2007, 08:58
Mam problem, bo w ogóle nie wyświetla mi się przeglądarka:
we własnościach txtAdres program pisze, że nie jest zdefiniowane :
txtAdres_TextChanged
Cała linijka wygląda tak:
this.txtAdres.TextChanged += new System.EventHandler(this.txtAdres_TextChanged);
Po skompilowaniu programu i wpisaniu adresu nic się nie dzieje.
ja,
2 stycznia 2008, 15:51
Niezapomnijcie o Ustawieniu na FORM1.KeyPreview = true
P@trico,
17 stycznia 2008, 14:11
Naprawdę. Prosze o wrzucenie projektu. Bardzo by nam pomógł =(
kwaq,
4 marca 2008, 12:15
Oki poradzilem sobie, troche zmienilem.
Projekt mozecie zassac tutaj: http://www.chomikuj.pl/qic/Programowanie/c*23/Debug.zip
kwaq,
6 marca 2008, 13:45
kwaq !! Wiesz co to jest projekt ?? Projekt to skopiowane pliki z Moje dokumenty>Visual Studio 2008>Projects !! Skopiuj to wsadź do paczki i publikuj... po co komu jakieś pliki graficzne i 1 pliczek exe ??
Lord500,
19 marca 2008, 09:12
Znalazłem 2 sposób na przycisk ENTER :D Robimy tak jak wcześniej aż do tego KeyPress.... klikamy 1 raz na txtAdres, potem w właściwościach na tego pioruna, następnie tam jest coś takiego jak KeyPress i po prawej stronie miejsce na wklejenie, kopiujemy ten ostatni kod na tej stronie czyli if (e..... itp i wklejamy go tam obok KeyPress następnie wyskoczy okienko, trzeba wcisnąć OK i działa :D
Lord500,
19 marca 2008, 09:51
@Lord500. Wiem stary, ale robiłem to w pośpiechu na lekcji i pomyliłem foldery bo musiałem mykać. Jak będę miał zajęcia w tej samej cali to postaram się.
kwaq,
3 kwietnia 2008, 22:43
Najlepsza przeglądarka internetowa to jest Windows Internet Explorer
Marcin Hałaczkiewicz,
3 maja 2008, 14:39
Lord500 29 grudnia 2007, 8:58
Ok, już wiem, ale na forum Centrum XP pisze to niedokładnie :/
Marcin Hałaczkiewicz,
3 maja 2008, 15:00
Najlepsza przeglądarka internetowa to jest Internet Explorer
Mateusz sulkowski,
7 maja 2008, 19:29
nie bo mozilla firefox i opera a internet explorer to jest sit moim zdaniem
BND,
20 grudnia 2008, 22:21
Czy ktoś wie jak ten komponet przedstawia sie po stronie servera?
pedro,
21 grudnia 2008, 12:47
Najlepsza to oczywyscie mozilla ! :P
?,
13 sierpnia 2009, 11:40
Internet Explorer ma Trojana i wolno otwiera strony... :) Niewierzycie to uzyjcie GooGle.pl
IE,
6 października 2009, 16:25
michu.1980@interia.pl prosze
michu,
18 grudnia 2009, 00:51
Chciałem podjąć próbę , korzystam z Microsoft Visual C# 2008 Express Edition , Zbudowałem całą przeglądareczkę i zaczełem wprowadzać poszczególne wartości zgodnie z opisem . Zaczynałem wielokrotnie , niestesty zawsze po wprowadzeniu wartości , (które kopiowałem i wklejałem) zawsze pokazywało mi około 14 błędów i z żalem poddałem się. To fakt ,że nie mam pojęcia o programowaniu , ale kto wie czy pierwszy udany eksperyment nie zachęcił by mnie do dalszych eksperymentów.. Zdaję sobie sprawę ,że autor tego reportarzu pisząc , myślał ,że częściowo zaawansowani sobie poradzą. No ale każdy kiedyś zaczyna.. Miło by było gdyby ktos udzielił mi dokładniejszych wskazówek .. Na chomiku juz dawno nie ma pliku wzorcowego..
Mirek,
28 grudnia 2009, 13:19
Kozacko, koleszko dzięki tobie napewno mój program będzie bardziej rozbudowany
Fas†,
21 maja 2010, 18:28
Gdyby ktoś mógł mi przesłać taki program był bym bardzo wdzięczny
djolsza @ o2 . pl przydał by sie także kod źródłowy :D
olsza,
29 maja 2010, 08:37
przecież to nie jest nowa przeglądarka tylko nkładka na IE... napisanie własnej przeglądarki to dużo więcej pracy i dużo więcej wiedzy potrzebnej do stworzenia choćby zarysu projektu
bzdura,
30 sierpnia 2010, 13:21
Zgadzam sie i te kody to były dobre 4 lata temu a nie w 2011 więc nawet w Visual c++ 2005 nie działają
Paweł,
10 kwietnia 2011, 17:26
Bo Visual C++ jest do C++ a nie do C#.
Pht,
3 grudnia 2011, 18:18
Super Tutorial
Programista Wysokich Lotów,
29 marca 2012, 22:01