TOC

This article has been localized into Italian by the community.

Dialogs:

SaveFileDialog

Il SaveFileDialog è utile per selezionare una posizione e un nome da dare al file che si desidera salvare. Funziona e assomiglia molto al OpenFileDialog che abbiamo usato nell'articolo precedente, con alcune sottili differenze. Proprio come OpenFileDialog, SaveFileDialog è un wrapper di un comune dialog di Windows, il che significa che il vostro utente vedrà all'incirca lo stesso dialog, che sia nella vostra applicazione, oppure ad esempio in Notepad.

Semplice esempio di SaveFileDialog

Per iniziare, ecco un semplice esempio di come si usa SaveFileDialog:

<Window x:Class="WpfTutorialSamples.Dialogs.SaveFileDialogSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SaveFileDialogSample" Height="300" Width="300">
    <DockPanel Margin="10">
        <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
            <Button Name="btnSaveFile" Click="btnSaveFile_Click">Save file</Button>
        </WrapPanel>
        <TextBox Name="txtEditor" TextWrapping="Wrap" AcceptsReturn="True" ScrollViewer.VerticalScrollBarVisibility="Auto" />
    </DockPanel>
</Window>
using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;

namespace WpfTutorialSamples.Dialogs
{
	public partial class SaveFileDialogSample : Window
	{
		public SaveFileDialogSample()
		{
			InitializeComponent();
		}

		private void btnSaveFile_Click(object sender, RoutedEventArgs e)
		{
			SaveFileDialog saveFileDialog = new SaveFileDialog();
			if(saveFileDialog.ShowDialog() == true)
				File.WriteAllText(saveFileDialog.FileName, txtEditor.Text);
		}
	}
}

Come si può vedere, la cosa principale è istanziare SaveFileDialog e poi chiamare il metodo ShowDialog(). Se ritorna true, possiamo usare la proprietà FileName (che conterrà il percorso selezionato e anche il nome del file scelto dall'utente) come percorso per scrivere il nostro contenuto.

Se si clicca il pulsante save, si dovrebbe vedere un dialog come questo, in base a quale versone di Windows si sta usando:

Filtro

Come si può vedere dal primo esempio, ho manualmente aggiunto un'estensione .txt al nome del mio file, soprattutto perché la combo box "Save as type" è vuota. Come per OpenFileDialog, questa box è controllata dalla proprietà Filter, ed è anche usata nello stesso modo.

saveFileDialog.Filter = "Text file (*.txt)|*.txt|C# file (*.cs)|*.cs";

Per avere maggiori dettagli sul formato della proprietà Filter, consultate il precedente articolo su OpenFileDialog, dove è spiegata nel dettaglio.

Con un filtro come quello sopra, il risultante SaveFileDialog sarà così invece:

Con questa sistemazione, si potranno scrivere i nomi dei file senza doverne specificare l'estensione: sarà piuttosto estratta dal tipo di file selezionato dal filtro nella combo box. Questo oltretutto indica all'utente quali formati per i file sono supportati dalla vostra applicazione, il che è ovviamente importante.

Impostare la cartella iniziale

La cartella iniziale usata da SaveFileDialog è decisa da Windows, ma usando la proprietà InitialDirectory , si può sovrascrivere. Di solito imposterete questo valore come una cartella specificata dall'utente, la cartella dell'applicazione o forse semplicemente come l'ultima cartella usata. La si può impostare tramite un percorso in formato di stringa, in questo modo:

saveFileDialog.InitialDirectory = @"c:\temp\";

Se si desidera usare una delle speciali cartelle di Windows, come ad esempio Desktop, Documenti o Programmi, si deve prestare particolare attenzione, dato che queste cartelle possono essere molto diverse a seconda di quale versione di Windows si sta usando e dipendono anche da quale versione è connesso l'utente. Il framework .NET può però essere d'aiuto, basta usare la classe Environment e i suoi membri per gestire le cartelle speciali:

saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

In questo caso, ho ottenuto il percorso per la cartella Documenti, ma date un'occhiata all'enumerazione di SpecialFolder, contiene valori per molti percorsi interessanti. Per la lista completa, consultare MSDN article.

Opzioni

Oltre alle opzioni già menzionate in questo articolo, vorrei attirare la vostra attenzione sulle seguenti proprietà, che sono utili per creare la SaveFileDialog che vi serve:

AddExtension - per default è true e determina se SaveFileDialog debba automaticamente appendere un'estensiaone al nome del file, nel caso l'utente la omettesse. L'estensione sarà basata sul filtro selezionato, a meno che non sia possibile, in questo caso si passerà alla proprietà DefaultExt (se specificata). Se si vuole che la propria applicazione sia in grado di salvare i file senza le estensioni, si potrebbe voler disabilitare questa opzione.

OverwritePrompt - di default è true e determina se il SaveFileDialog debba chiedere una conferma nel caso in cui l'utente immetta un nome per il file che risulti essere già in uso, causando quindi che un file esistente venga sovrascritto. Di solito si lascia questa opzione abilitata, tranne per casi speciali.

Title - si potrebbe voler sovrascrivere questa propietà se si volesse un titolo personalizzato. Per default è "Save As" o la versione equivalente locale e la proprietà è valida anche per OpenFileDialog.

ValidateNames - per default è true e a meno che non sia disabilitata, assicurerà che l'utente immetta solamente nomi validi per Windows ai file, prima di permettergli di proseguire.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!