Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al Visual Basic .NET - Un semplice editor di testi

Guida al Visual Basic .NET

Capitolo 61° - Un semplice editor di testi

<< Precedente Prossimo >>

Per realizzare un editor di testi bisogna prima di tutto sapere come permettere all'utente di scegliere quale file aprire e in quale file salvare ciò che verrà scritto. Queste semplici interazioni vengono amministrate da due controlli: OpenFileDialog e SaveFileDialog.
In questo breve capitolo esemplificherò il caso di un semplicissimo editor di testi, con le funzionalità base di apertura e salvataggio dei file *.txt. Prima di procedere, ecco una lista delle proprietà più significative dei controlli in questione:

  • AddExtension : se il nome del file da aprire/salvare non ha un estensione, il controllo l'aggiunge automaticamente sulla base della proprietà DefaultExt o Filter
  • CheckFileExists : controlla se il file selezionato esista
  • CheckPathExists : controlla se la cartella selezionata esista
  • DefaultExt : l'estenzione predefinita su cui si basa la proprietà AddExtension
  • FileName : il nome del file visualizzato di default nella textbox del controllo, e modificato dopo l'interazione con l'utente
  • Filter : la proprietà più importante dopo FileName. Serve a definire quali tipi di file siano visualizzati dal controllo. Nella finestra di dialogo, infatti, come mostra l'immagin sopra riportata, poco sotto alla textbox contenente il nome del file, c'è una combobox che permette di selezionare il "filtro", per l'appunto, ossia quali estensioni prendere in considerazione (nell'esempio "File di testo", con estensione *.txt, quella che si prenderà in esame nell'esempio). Ci sono delle regole standard per la costruzione della stringa che deve essere passata a questa proprietà. Il formato corretto è:
    Descrizione file|*.estensione1;*.estensione2|Descrizione file|... 
    Se, quindi, si volessero visualizzare solo file multimediali, divisi in musica e video, questo sarebbe il valore di Filter: "Musica|*.mp3;*.wav;*.wma;*.ogg;*.mid|Video|*.mpg;*.mp4;*.wmv;*.avi". Per i file di testo "File di testo|*.txt" e per tutti i file "Tutti i file|*.*"
  • InitialDirectory: la cartella iniziale predefinita
  • MultiSelect: se vero, si potranno selezionare più file (creando un riquadro col puntatore o selezionandoli manualmente uno ad uno tenendo premuto Ctrl)
  • Title: il titolo della finestra di dialogo
  • ValidatesName: controlla che i nomi dei file non contengano caratteri vietati
  • OverWritePrompt: (solo per SaveFileDialog) controlla se il file selezionato ne sovrascrive un altro e chiede se procedere o no

 

Esempio: Editor di testi

Dopo aver analizzato le proprietà importanti, si può procedere alla stesura del codice, ma prima una precisazione. Non avendo interfaccia grafica sulla finestra, ma costituendo windows forms a sè stante, i controlli OpenFileDialog e SaveFileDialog possono essere inseriti nel designer oppure inizializzati da codice indifferentemente (per quanto riguarda lo scopo). La diversità nell'usare un metodo piuttosto che un altro sta nel fatto che il primo utilizza sempre lo stesso controllo, che potrebbe dare dei FileName errati in casi speciali, mentre il secondo ne inizializza uno nuovo ad ogni evento, costando di più in termini di memoria. Nell'esempio seguente utilizzo il primo metodo, ma potrà capitare che sfrutti anche il secondo in diverse altre occasioni.
Ora si aggiungano i controlli necessari:

  • Button : Name = cmdOpen, Text = "Apri", Anchor = Bottom Or Left
  • Button : Name = cmdSave, Text = "Salva", Anchor = Bottom Or Right
  • Button : Name = cmdClose, Text = "Chiudi", Anchor = Bottom
  • TextBox : Name = txtFile, Multiline = True, Anchor = Top Or Right Or Bottom Or Left
  • OpenFileDialog : Name = FOpen, Filter = "File di testo|*.txt", FileName = "Testo"
  • SaveFileDialog : Name = FSave, Filter = "File di testo|*.txt", DefaultExt = "txt"

TextEditor.jpg

Private Sub cmdOpen_Click(ByVal sender As Object, ByVal e As EventArgs)_
    Handles cmdOpen.Click
    'La funzione ShowDialog visualizza la finestra di dialogo e 
    'restituisce quale pulsante è stato premuto
    'Se il pulsante corrisponde con OK, procediamo
    If FOpen.ShowDialog = Windows.Forms.DialogResult.OK Then
        'Apre un file in lettura
        'Usa la proprietà FileName di FOpen, che restituisce il
        'path del file selezionato: è sicuro che il file esista
        'perchè l'utente ha premuto Ok e non ha chiuso la
        'finestra di dialogo
        Dim R As New IO.StreamReader(FOpen.FileName)

        'Legge tutto il testo del file e lo deposita nella textbox
        txtFile.Text = R.ReadToEnd

        'Chiude il file
        R.Close()
    End If
End Sub

Private Sub cmdSve_Click(ByVal sender As Object, ByVal e As EventArgs) _ 
    Handles cmdSave.Click
    'Viene visualizzata la finestra di dialogo
    If FSave.ShowDialog = Windows.Forms.DialogResult.OK Then
        'Apre un file in scrittura, di ci si assicura che 
        'l'utente acconsenta alla sovrascrittura se già esistente
        'mediante la proprietà OverwritePrompt
        Dim W As New IO.StreamWriter(FSave.FileName)

        'Scrive tutto il contenuto della textbox nel file
        W.Write(txtFile.Text)

        'Chiude il file
        W.Close()
    End If
End Sub

Private Sub cmdClose_Click(ByVal sender As Object, ByVal e As EventArgs) _
    Handles cmdClose.Click
    If txtFile.Text <> "" And _ 
       FSave.ShowDialog = Windows.Forms.DialogResult.OK Then
        Dim W As New IO.StreamWriter(FSave.FileName)

        W.Write(txtFile.Text)

        W.Close()
    End If
End Sub 

Il sorgente può essere reso ancora più breve usando i metodi IO.File.WriteAllText e IO.File.ReadAllText.

<< Precedente Prossimo >>
A proposito dell'autore

C#, TypeScript, java, php, EcmaScript (JavaScript), Spring, Hibernate, React, SASS/LESS, jade, python, scikit, node.js, redux, postgres, keras, kubernetes, docker, hexo, etc...