VB.NET - Criando o seu Navegador com o WebBrowser


Que tal criar um navegador básico usando o VB.NET ? Uma forma de fazer bem simples de alcançar este objetivo é usar o controle WebBrowser. Vamos ver como se faz...

Inicie um novo projeto no Visual Studio .NET do tipo Windows Application usando a linguagem VB.NET.

O primeiro passo é habilitar o componente WebBrowser para ser usado no projeto que vamos criar. Para isto siga o roteiro:

Vamos continuar com o projeto. No formulário principal , que vou chamar de frmBrowser.vb , vamos incluir os seguintes componentes:

Veja o layout do formulário com os controles abaixo:

Criamos 3 abas no controle TabControl:

Veja como usar o componente TabControl no artigo : VB.NET -  Exibindo registros selecionados com TabControl

Os imports usados na aplicação são :

Imports System.Net

Imports System.IO

Imports System.Text

 

No inicio o formulário vamos criar uma variável de evento para o WebBrowser:

 

' Cria uma variavel manipuladora de evento a nivel de classe

Private WithEvents PaginaWeb As SHDocVw.DWebBrowserEvents_Event

 

No evento Load do formulário vamos incluir o seguinte código:

 

' Inicia o conrole WebBrowser(SHDocVw.dll)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

      PaginaWeb = DirectCast(WebBrowser.Application, SHDocVw.WebBrowser_V1)

End Sub

Para controlar o redimensionamento dos controles no formulário vamos usar o código a seguir:

' Arranja o tamanho dos controles no formulário em resposta ao redimensionamento do formulário

Private Sub Form1_Layout(ByVal sender As Object, ByVal e As System.Windows.Forms.LayoutEventArgs) Handles MyBase.Layout


Dim
sz As Size

Dim p As Point
 

' redimensiona o groupbox para a área do formulário

GroupBox1.Width = Me.ClientSize.Width


' redimensiona e reposiciona o controle TabControl no formulário

TabControl1.Width = Me.ClientSize.Width

TabControl1.Height = Me.ClientSize.Height - GroupBox1.Size.Height


p.X = 0

p.Y = GroupBox1.Height

TabControl1.Location = p


End
Sub

Para controlar o redimensionamento dos controles filhos do TabControl vamos usar o código abaixo:

' Redimensiona os controles filhos de TabControl em resposta ao redimensionamento do tabcontrol

Private Sub TabControl1_Layout(ByVal sender As Object, ByVal e As System.Windows.Forms.LayoutEventArgs) Handles MyBase.Layout
 

Dim h As Integer = TabControl1.TabPages(TabControl1.SelectedIndex).Height

Dim w As Integer = TabControl1.TabPages(TabControl1.SelectedIndex).Width


TextBoxHTML.Height = h

TextBoxHTML.Width = w

WebBrowser.Height = h

WebBrowser.Width = w

txtURLVisitadas.Height = h

txtURLVisitadas.Width = w


End
Sub

Quando o usuário clicar no botão - Go - devemos carregar a página no componente.

' Carrega a URL entrada pelo usuário no WebBrowser

Private Sub carregaURL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click


Cursor.Current = Cursors.WaitCursor


Try

   If String.Compare(TextBoxURL.Text.Substring(0, 7), "http://") Then ' Inclui http:// na string se for preciso

         TextBoxURL.Text = "http://" & TextBoxURL.Text.ToString()

   End If

   carregaBrowser(TextBoxURL.Text.ToString())

Catch ex As Exception

    MsgBox(ex.Message)

End Try
 

Cursor.Current = Cursors.Default

End Sub

 

A função carregaBrowser() recebe a URL informada no TextBox e carrega a página usando o método Navigate do controle. Abaixo o seu código :

' Carrega a URL definida no contole WebBrowser

Private Sub carregaBrowser(ByVal URL As String)
 

Dim obj As System.Object = System.Reflection.Missing.Value

Try

     WebBrowser.Navigate(URL, obj, obj, obj, obj)

Catch ex As Exception

     Beep()

End Try

End Sub

O código que controla em qual aba do controle TabControl o usuário clicou é dado a seguir :

Private Sub TabControl1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabControl1.Click

' Se a tab "Código Fonte" foi selecionado carrega o HTML da página atual

If TabControl1.SelectedIndex = 1 Then

       If WebBrowser.LocationURL.ToString() <> "" Then

        carregaHTML(TextBoxURL.Text)

     End If

End If


' Se a tab URLs visitadas foi selecionada vai para o fim do textbox

If TabControl1.SelectedIndex = 2 Then

    txtURLVisitadas.SelectionStart = TextBoxHTML.Text.Length

    txtURLVisitadas.SelectionLength = 0

    txtURLVisitadas.ScrollToCaret()

End If

End Sub

 

O código que faz a atualização das URLs visitadas é o seguinte :

' Atualiza o textbox com as urls visitadas

Private Sub PaginaWeb_TitleChange(ByVal titulo As String) Handles PaginaWeb.TitleChange


Static
Dim TituloAnterior = ""


If
titulo <> TituloAnterior Then ' Ignora eventos duplicados para a mesma pagina

    txtURLVisitadas.Text += titulo & vbCrLf

    txtURLVisitadas.Text += " " & WebBrowser.LocationURL.ToString() & vbCrLf & vbCrLf

End If
 

TituloAnterior = titulo

End Sub

 

O código da função carregaHTML()  que carrega o fonte do código HTML na caixa de texto da tab Código Fonte , é o seguinte :

' Preenche o texto HTML da URL definida na caixa de texto da tab

Private Sub carregaHTML(ByVal URL As String)
 

Static Dim URLAnterior As String = ""


If
URL = URLAnterior  Then Return ' Não precisa recarregar o texto se for a mesma URL

     Try

             ' inicia o leitor da stream para a pagina atual

              Dim myHttpWebRequest As HttpWebRequest = WebRequest.Create(URL)

           Dim myHttpWebResponse As HttpWebResponse = myHttpWebRequest.GetResponse()

           Dim recvStream As Stream = myHttpWebResponse.GetResponseStream()

 

          ' le o stream no formato "utf-8"

            Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")

         Dim readStream As New StreamReader(recvStream, encode)

         Dim sPagina As String


           
While (readStream.Peek() > -1)

                  sPagina += readStream.ReadLine() + vbCrLf

         End While


       TextBoxHTML.Text = sPagina

        URLAnterior = URL

Catch ex As Exception

     Beep()

End Try

End Sub

 

A navegação para frente e para trás e feita usando os métodos : GoBack() e GoForward(). Veja abaixo:

' Carrega a oágina anterior

Private Sub PrevPage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PicturePrevPage.Click
 

Try

    WebBrowser.GoBack()

Catch

    Beep()

End Try

End Sub
 

' Carrega a próxima pagina

Private Sub NextPage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureNextPage.Click


Try

     WebBrowser.GoForward()

Catch

    Beep()

End Try

End Sub

 

Executando o projeto e fazendo um teste com  a página do Google temos o resultado exibido na sequência de telas abaixo:

A página sendo exibida no controle WebBrowser
O código HTML da página
A URL visitada

Pegue o código completo aqui :   NetwebBrowser.zip

Até o próximo artigo VB.NET..

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti