• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida [VB.NET]Implementare la cronologia nel Web Browser

System32

Utente Stellare
Autore del topic
2 Gennaio 2010
15.556
112
Miglior risposta
0
Salve, oggi pomeriggio mi sono messo di buona volontà e ho deciso di scrivere questa guida per risolvere il problema riguardante il fatto che gli utenti non sanno come implementare la cronologia nei loro Web Browser ( questo deriva dal fatto che scrivono programmi senza conoscere la teoria, ragion per cui ogni singola riga di codice che vedrete scritta in questa discussione sarà commentata, dunque spiegata ). Dunque, per implementare la cronologia nei vostri Web Browser possiamo usare 3 modi :


  1. My.Settings
  2. File di testo
  3. Chiavi di registro

Andiamo a vedere singolarmente come usare questi metodi :

My.Settings

Anche se non mi piace molto come metodo è sicuramente il più veloce ed immediato da eseguire. Per eseguire questo metodo andiamo su Project > NomeCheAveteDatoAlProgetto Properties..., rechiamoci nella "sezione" Settings e dove troviamo scritto Name scriviamo il nome che vogliamo dare alla variabile che conterrà l'insieme di link ( sarà quindi un array ), io per esempio l'ho chiamato Cronology; di fianco dobbiamo specificare il tipo di variabile ( string, integer, char etc... ) noi come tipo setteremo System.Collections.Specialized.StringCollection e come Scope inseriremo User. La cosa importante è adesso dare il Value ( valore ) alla variabile quindi clicchiamo a destra della casella vuota sotto Value e inseriamo, per esempio, nothing; poi clicchiamo Ok. Questo ci serve perché se tentiamo di accedere alla variabile senza inizializzarla otterremo un'eccezione di tipo NullReference proprio perché l'oggetto ( la variabile, in questo caso ) non è istanziata; è come se scrivessimo Dim var As String = Nothing.

Supponendo di avere un Button ed una TextBox ( nella quale l'utente deve inserire il link all'interno del quale navigare ) il codice risulta essere :

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

- My.Settings.Cronology.Add(txtSito.Text) : dal momento che la variabile Cronology è una collezione di stringhe ( un array di stringhe ) potrà utilizzare tutti i metodi di una collezione di stringhe ( a noi interessa solo il metodo Add ) quindi con questa istruzione non facciamo altro che aggiungere, di volta in volta, alla collezione di stringhe il link fornito dall'utente.
- My.Settings.Save() : questa istruzione invece serve per salvare le impostazioni, facile.

Il metodo con My.Settings è concluso, passiamo agli altri due.

File di testo

Questo è il metodo che preferisco, è perfettamente gestibile come meglio si crede, inoltre è estremamente semplice. L'intento è il seguente : scrive su un file di testo i link che l'utente fornirà nella TextBox. Il codice quindi risulterà essere :

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

- Dim WriteCronology As StreamWriter : importando il Namespace System.Io ( Imports System.IO ) e System.Io.File ( Imports System.IO.File ) potremo utilizzare la classe StreamWriter ( flusso in scrittura ) per creare il nostro file di testo, con questa linea di codice non facciamo altro che dichiarare la variabile WriteCronology come un flusso in scrittura ( StreamWriter, per l'appunto ).
- WriteCronology = File.AppendText(Application.StartupPath & "\cronology.tmp") : con questa riga non facciamo altro che creare un file di testo che sarà di tipo append ( ovvero che aggiungendo del testo al file esso non verrà sovrascritto al precedente ma aggiungo su una nuova riga ) nel percorso definito da quello dell'applicazione ( Application.StartupPath, non è altro che il percorso del vostro eseguibile ed & "\cronology.tmp" non è altro che il nome del file di testo dentro il quale inserire la cronologia ). Se per esempio il percorso del vostro exe è C:\ allora il file verrà creato in quel percorso, sarà dunque accessibile tramite il percorso C:\cronology.tmp ( ricordo che l'operatore & chiamato anche operatore di unione non fa altro che unire 2 stringhe ( in questo caso "C:\" e "\cronology.tmp"" ).
- WriteCronology.WriteLine(txtSito.Text) : richiamando il metodo WriteLine scriveremo, su una diversa riga, ogni link che fornirà l'utente. L'argomento da passare alla funzione è appunto la TextBox ( che io ho rinominato in txtSito ).
- WriteCronology.Close() : cosa molto importante è chiudere il flusso di scrittura, fattibile attraverso il metodo Close. Bisogna sempre chiudere il flusso onde evitare errori.

Il metodo con il file di testo è concluso, passiamo all'ultimo.

Chiavi di registro

Questo è l'ultimo nonché il metodo più "macchinoso"; ve lo posto lo stesso perché conoscere qualcosa in più non fa mai male. L'intento è il seguente : scrivere i link forniti dall'utente all'interno di una chiave di registro. Prima di parlarvene però occorre aprire una parentesi : se noi scrivessimo all'interno di una chiave di registro più volte non faremo altro che sovrascrivere il valore che vi era in precedenza, questo perché dobbiamo dare un nome diverso per ogni sottochiave della chiave di registro, per fare ciò abbiamo bisogno di una variabile numerica che ci permetta di variare il testo delle sottochiavi. Esempio : se io chiamo la sottochiave Cronology allora affinché non venga sovrascritto il valore di essa scriverò Cronology 1 ( il cui valore sarà un link ), Cronology 2 ( il cui valore sarà un link ), Cronology 3 ( il cui valore sarà un altro link ancora ) etc...capirete quindi che non è possibile scrivere tutto questo perché non sappiamo quanti link vorrà salvare l'utente, abbiamo quindi bisogno di una variabile numerica che, tecnicamente parlando, si chiama variabile contatore che inizializzeremo a 0 ( Dim CronologyNumber As Integer = 0 ) mettendola sotto Public Class Form1, sarà quindi una variabile globale ( cioè che rimane in memoria finché il programma non viene chiuso, sarà inoltre accessibile da più "pezzi"/"parti" di codice ). Il codice risulterà essere :

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

- CronologyNumber += 1 : con questa linea di codice incrementiamo il valore della variabile CronologyNumber di 1 ( 0 + 1 = 1; dopo 1 + 1 = 2; dopo ancora 2 + 1 = 3 etc... ) in modo da poter attuare il discorso che vi ho spiegato poco fa.
- Dim rKey As RegistryKey : importanto Microsoft.Win32 ( Imports Microsoft.Win32 ) potremmo utilizzare la classe RegistryKey che ci permetterà di eseguire operazioni sulle chiavi di registro; con questa linea di codice quindi definiamo rKey come RegistryKey.
- rKey = Registry.CurrentUser.OpenSubKey("Cronology", True) : con questa linea di codice apriamo la chiave di registro in CurrentUser attraverso il metodo OpenSubKey in modo da scrivere il valore nel caso in cui il programma fosse stato aperto in precedenza; gli argomenti del metodo OpenSubKey corrispondono rispettivamente al nome della sottochiave e alla possibilità di scrivere dentro essa.
- If rKey Is Nothing Then : con questa linea di codice inizia l'istruzione condizionale che verifica che se la chiave di registro è nulla, se lo è allora crea la sottochiave ( questo significa che il programma non è stato aperto altre volte ), altrimenti setta semplicemente il valore e chiude la chiave.
- rKey = Registry.CurrentUser.CreateSubKey("Cronology") : con questa linea di codice appunto non facciamo altro che creare una sottochiave chiaamta Cronology all'interno di CurrentUser ( voi potete scegliere ovunque, io ho scelto CurrentUser )
- rKey.SetValue("Cronology " & CronologyNumber, txtSito.Text) - con questa istruzione settiamo il valore ( attraverso il metodo SetValue ) alla sottochiave di registro che si chiama Cronology contenente il sito fornito dall'utente; importante notare & CronologyNumber...vale il discorso che vi ho fatto prima.
- rKey.Close() : così come per i file di testo anche le chiavi di registro devono essere chiuse correttamente affinché non si verifichino errori.
- Else : da qui comincia il caso in cui la chiave esiste e che quindi il programma è già stato aperto ed utilizzando ( quindi la chiave di registro è stata creata ).
- rKey.SetValue("Cronology " & CronologyNumber, txtSito.Text) : questa istruzione è uguale a quella di prima, rileggere il significato.
- rKey.Close() : Idem.

La guida è conclusa, spero sia messa in rilievo insieme a questa in modo da non creare discussioni inutili.

NB: mi sono dimenticato di scrivere una cosa...in realtà questa guida l'ho scritta solo per salvare la cronologia ma il browser deve anche poterla caricare...e qui il discorso si fa più complesso, a livello di ragionamento, così ho deciso che il programma COMPLETO lo fornirò solo a chi reputo all'altezza, non posso darvi tutto dalla A alla Z...

Alla prossima.
 
Ultima modifica:
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

grazie system utile, così almeno non ci sono si soliti browser ma almeno avranno una cosa in più userò questo codice lo implementerò con webkit mi mancava, non riuscivo mai a farla ora ci riesco!
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

grazie system utile, così almeno non ci sono si soliti browser ma almeno avranno una cosa in più userò questo codice lo implementerò con webkit mi mancava, non riuscivo mai a farla ora ci riesco!

Perché non riuscivi ad implementare la cronologia ? ...è così semplice fare le cose quando si conoscere la teoria...
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

sssssssssssssss
 
Ultima modifica da un moderatore:
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Ottima guida, chiara e semplice.
Comunque, le settings si potevano aggiungere cliccando su 'progetto' se non sbaglio :emoji_confused:
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Ottima guida e ottima informazione, System32. ;)
Voto 9.5/10 anche su com'è strutturata!

Ti ringrazio.

Ottima guida, chiara e semplice.
Comunque, le settings si potevano aggiungere cliccando su 'progetto' se non sbaglio :emoji_confused:

...
Per eseguire questo metodo andiamo su Project > NomeCheAveteDatoAlProgetto Properties...
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Perché non riuscivi ad implementare la cronologia ? ...è così semplice fare le cose quando si conoscere la teoria...

No, usano IE riuscivo, ma con webkit mi venivano degli errori, sulla teoria hai ragione, avendo finito le medie non ho potuto ancora studiare il vb.net, tutto cosa riesco a fare, e basato su esperienze ed errori che col tempo sono riuscito a correggere.
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

System quindi per ogni sito che visiteremo verrà inserita una nuova stringa nel My.Settings con il sito?
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

System quindi per ogni sito che visiteremo verrà inserita una nuova stringa nel My.Settings con il sito?

No...se avessi letto attentamente e avessi le basi del linguaggio non mi avresti fatto questa domanda...Ti spiego di nuovo : la variabile Cronology è un array di stringhe, quindi ogni volta che si salva il link questo viene messo all'interno di questo array di stringhe. Ho utilizzato apposta l'array di stringhe ( anziché il solito tipo primitivo String ) proprio per facilitarne "l'utilizzo", ovvero per prendere ogni singolo link basterà ciclare l'array con un For Each.
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

ok capito, grazie per la spiegazione.
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Questo codice:
"My.Settings.Cronology.Add(txtSito.Text)
My.Settings.Save()"

Dove va messo?? Nel codice della TextBox all' Evento TextChanged??

Scusate l' ignoranza
 
Ultima modifica:
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Questo codice:
"My.Settings.Cronology.Add(txtSito.Text)
My.Settings.Save()"

Dove va messo?? Nel codice della TextBox all' Evento TextChanged??

Scusate l' ignoranza

Va messo nel bottone per salvare la cronologia ;)
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Mi dice: NullReferenceExeption non è stata gestita
Riferimento a un oggetto non impostato su un istanza di oggetto.... Che vuol dire???

Come risolvo??
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Mi dice: NullReferenceExeption non è stata gestita
Riferimento a un oggetto non impostato su un istanza di oggetto.... Che vuol dire???

Come risolvo??

In quale parte di codice te lo dice ?
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

In quale parte di codice te lo dice ?


In questa parte di codice qui:
My.Settings.Cronology.Add(Scheda.ComboBox1.Text)

Che all' inizio era cosi:
My.Settings.Cronology.Add(TxtSito.Text)
Tuttavia se lo lasciavo cosi mi dice va che non era dichiarato e quindi non accessibile
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Perfetto, come sempre.
Hai scritto una marea di cose, credo che tu lo abbia studiato a scuola o sappia la teoria del linguaggio ;)
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

Perfetto, come sempre.
Hai scritto una marea di cose, credo che tu lo abbia studiato a scuola o sappia la teoria del linguaggio ;)


>Comunque sia non funziona XD :emoji_slight_frown:

Se avete qualche soluzione vi sarei grato se me la fornite
 
Riferimento: [VB.NET]Implementare la cronologia nel Web Browser

In questa parte di codice qui:
My.Settings.Cronology.Add(Scheda.ComboBox1.Text)

Che all' inizio era cosi:
My.Settings.Cronology.Add(TxtSito.Text)
Tuttavia se lo lasciavo cosi mi dice va che non era dichiarato e quindi non accessibile

Ma hai creato la variabile Cronology all'interno di My.Settings ?

Perfetto, come sempre.

Ti ringrazio.

Hai scritto una marea di cose, credo che tu lo abbia studiato a scuola o sappia la teoria del linguaggio ;)

Le cose che conosco provengono da uno studio da autodidatta...e sì, conosco la teoria.

>Comunque sia non funziona XD :emoji_slight_frown:

Se a me funziona significa che sei tu che non lo sai fare funzionare...