|
WebBrowser è uno dei controlli standard forniti dal Framework .NET fin dalla versione 1.0, e le sue potenzialità sono abbastanza
elevate da permetterci di "creare" (o quanto meno, simulare) un nostro personale web browser, come Mozilla FireFox, Opera o Google Chrome.
Non a caso ho messo tra virgolette il verbo creare, poiché il controllo che andremo ad analizzare tra poco assolve un'unica
funzione, che costituisce, però, il fulcro di tutta la navigazione.
WebBrowser permette di caricare al proprio interno una pagina web e di visualizzarla senza praticamente scrivere alcun codice. Nei prossimi
paragrafi illustrerò come scrivere un semplicissimo programma di navigazione basato su questa classe.
La fisionomia di WebBrowser
Dopo aver creato un nuovo progetto Windows Forms, trascinate sulla superficie del designer un nuovo controllo WebBrowser. Una volta posizionato
dovrebbe mostrarsi come un'area totalmente bianca: per ora, infatti, non contiene ancora nessuna pagina. Prima di procedere, ecco uno
sguardo alla lista dei suoi membri più importanti:
- CanGoBack : determina se sia possibile tornare indietro nella cronologia
- CanGoForward : determina se sia possibile andare avanti nella cronologia
- Document : un oggetto di tipo HtmlDocument contenente tutte le informazioni sulla pagina. Tra le sue proprietà, inoltre, ci sono
molti modi per ottenere una vasta gamma di tag, ma illustrerò in dettaglio questi meccanismi nel prossimo capitolo
- DocumentStream : permette di leggere la pagina web come da un file. Restituisce un oggetto System.IO.Stream
- DocumentText : restituisce o imposta il codice della pagina. Dopo aver caricato una pagina, contiene il suo codice HTML. Modificando
questa proprietà, anche la pagina visualizzata verrà rielaborata (e ricaricata) di conseguenza
- DocumentTitle : il titolo del documento
- DocumentType : il tipo del documento
- GoBack : torna indietro alla pagina precedente
- GoForward : procede alla pagina successiva
- GoHome : ritorna all'Home Page. Per ottenere l'indirizzo di quest'ultima, ricerca nel registro di sistema le preferenze che l'utente ha
impostato per il browser Internet Explorer
- GoSearch : si reca alla pagina di ricerca predefinita. Esegue lo stesso procedimento di GoHome
- IsBusy : indica se il controllo sta caricando un nuovo documento
- IsOffline : indica se il controllo è in modalità offline (sta processando pagine web su disco fisso)
- IsWebBrowserContextMenuEnabled : determina se sia attivo il menù contestuale predefinito per il Web Browser
- Naviagate(S) : apre la pagina referenziata dall'indirizzo url S
- Print : stampa il documento aperto con i settaggi impostati della stampante corrente
- ReadyState : restituisce lo stato del controllo. L'enumeratore può assumere quattro valori: Complete (pagina completa), Interactive
(le parti della pagina caricate sono sufficienti a garantire un minimo di interazione con l'utente, ad esempio con dei click sui link presenti),
Loaded (il documento è caricato e inizializzato, ma non tutti i dati sono ancora stati ricevuti), Loading (il documento è in
caricamento) e Uninitialized (nessun documento è stato aperto)
- ShowPageSetupDialog : visualizza le impostazioni pagina con una finestra di dialogo Internet Explorer
- ShowPrintDialog : visualizza la finestra di stampa di Internet Explorer
- ShowPrintPreviewDialog : visualizza l'anteprima di stampa in una finestra Internet Explorer
- ShowPropertiesDialog : visualizza la finestra delle proprietà pagina come Internet Explorer
- ShowSaveAsDialog : visualizza la finestra di dialogo di salvataggio di Internet Explorer
- Url : restituisce un oggetto Uri rappresentante l'indirizzo della pagina caricata
- Version : la versione di Internet Explorer installata
Alcune delle funzionalità esposte da questi membri si reggono pesantemente su Internet Explorer, come ad esempio la visualizzazione
dell'anteprima o la ricerca della home page (che potete cambiare solo dal menù opzioni di IE). Nonostante tali pesanti impedimenti,
è possibile usare il controllo con semplicità.
Nel nostro progetto possiamo quindi aggiungere qualche altro controllo:
- btnBack per andare indietro;
- btnForward per andare avanti;
- btnRefresh per aggiornare la pagina;
- txtUrl per contenere l'indirizzo a cui recarsi;

Come vedete ho inserito tutti i controlli sopra menzionati in un ToolStrip, e tutti i pulsanti sono di default disattivati (Enabled = False),
poiché all'inizio non è caricata nessuna pagina e di conseguenza non si può effettuare alcuna operazione.
Con questo semplice codice potremo iniziare a navigare un po':
Public Class Form1
Private Sub txtUrl_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtUrl.KeyDown
'Quando si preme invio durante la digitazione, naviga
'alla pagina indicata
If e.KeyCode = Keys.Enter Then
wbBrowser.Navigate(txtUrl.Text)
'Poiché si inizia a navigare, è lecito fermare
'il caricamento, quindi attiva btnCancel
btnCancel.Enabled = True
End If
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
'Ferma l'attività del WebBrowser
wbBrowser.Stop()
btnCancel.Enabled = False
btnRefresh.Enabled = True
End Sub
Private Sub wbBrowser_Navigating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles wbBrowser.Navigating
'L'evento Navigating si genera prima della navigazione
btnCancel.Enabled = True
End Sub
Private Sub wbBrowser_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wbBrowser.DocumentCompleted
'L'evento DocumentCompleted si verifica quando una pagina
'è stata completamente caricata. Se anche una sola
'delle parti della pagina non è completa, l'evento
'non viene generato. Per evitare brutte soprese, potete
'utilizzare l'evento Navigated, che si verifica dopo la
'navigazione (indipendentemente dal successo o meno
'dell'operazione)
btnCancel.Enabled = False
btnBack.Enabled = wbBrowser.CanGoBack
btnForward.Enabled = wbBrowser.CanGoForward
btnRefresh.Enabled = True
End Sub
Private Sub btnRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
wbBrowser.Refresh()
End Sub
Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click
wbBrowser.GoBack()
End Sub
Private Sub btnForward_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnForward.Click
wbBrowser.GoForward()
End Sub
End Class
Come alternativa a DocumentCompleted, si può utilizzare Navigated:
Private Sub wbBrowser_Navigated(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatedEventArgs) Handles wbBrowser.Navigated
btnCancel.Enabled = False
btnBack.Enabled = wbBrowser.CanGoBack
btnForward.Enabled = wbBrowser.CanGoForward
btnRefresh.Enabled = True
End Sub
Possiamo ora aggiungere una barra di stato in basso per comunicare lo stato della navigazione:
Public Class Form1
Private Sub txtUrl_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtUrl.KeyDown
If e.KeyCode = Keys.Enter Then
wbBrowser.Navigate(txtUrl.Text)
btnCancel.Enabled = True
End If
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
wbBrowser.Stop()
btnCancel.Enabled = False
btnRefresh.Enabled = True
End Sub
Private Sub wbBrowser_Navigating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatingEventArgs) Handles wbBrowser.Navigating
btnCancel.Enabled = True
'La proprietà StatusText contiene in forma leggibile
'un resoconto dell'operazione che il controllo sta svolgendo
lblStatus.Text = wbBrowser.StatusText
End Sub
Private Sub wbBrowser_Navigated(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserNavigatedEventArgs) Handles wbBrowser.Navigated
btnCancel.Enabled = False
btnBack.Enabled = wbBrowser.CanGoBack
btnForward.Enabled = wbBrowser.CanGoForward
btnRefresh.Enabled = True
lblStatus.Text = "Pagina caricata"
End Sub
Private Sub btnRefresh_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRefresh.Click
wbBrowser.Refresh()
End Sub
Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBack.Click
wbBrowser.GoBack()
End Sub
Private Sub btnForward_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnForward.Click
wbBrowser.GoForward()
End Sub
Private Sub wbBrowser_ProgressChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles wbBrowser.ProgressChanged
prgProgress.Value = e.CurrentProgress / e.MaximumProgress * 100
lblStatus.Text = wbBrowser.StatusText
End Sub
End Class

Dato che questo non vuole essere un tutorial su come creare un browser, ma solo un abstract per mostrare le funzionalità del controllo,
non mi dilungherò oltre nella modifica e nella raffinazione dell'applicazione proposta in esempio, anche perchè sono sicuro
che qualche lettore lo starà già facendo e non vorrei togliergli il divertimento XD |
|