Casino online











Mercato forex






B9. OpenFileDialog e SaveFileDialog


Questi controlli servono a visualizzare delle finestre di dialogo che aiutino l'utente a scegliere uno o più files da aprire o salvare. La loro interfaccia è simile a questa:


OpenFileDialog

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"

Editor di testi

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 nome 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 = Nothing 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.




 

The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.