This article has been localized into Hungarian by the community.
A SaveFileDialog dialógusablak
A SaveFileDialog segítséget nyújt majd egy hely és egy fájlnév kiválasztásában, amikor szeretnél elmenteni egy fájlt. Nagyon hasonlóan működik, és néz ki az OpenFileDialog-hoz, amit már az előző cikkben is használtunk, egy pár apróbb különbségtől eltekintve. Akárcsak az OpenFileDialog, a SaveFileDialog is egy csomagoló egy általános Windows dialógusablak körül, ami azt jelenti, hogy a felhasználók nagyjából ugyanazt fogják látni, akár a te alkalmazásodból jelenítik azt meg, akár mondjuk a Jegyzettömbből.
Egyszerű SaveFileDialog példa
Hogy belevágjunk, vegyünk egy egyszerű példát a SaveFileDialog használatára:
<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);
}
}
}
Amint azt láthatod, főként a SaveFileDialog példányosításáról, és annak ShowDialog() metódusának meghívásáról van szó. Amennyiben a visszatérési érték 'true', a FileName tulajdonságot (ami a kiválasztott elérési utat, valamint a felhasználó által megadott fájlnevet fogja tartalmazni) fogjuk cél elérési útként használni a tartalom kiírásához.
Ha a mentés (save) gombra kattintassz, egy ilyesmi dialógusablakot kell majd láss, attól függően, hogy a Windows mely verzióját használod:
Szűrő
Ahogy azt az első példából is láthatod, a kívánt fájlnévhez manuálisan hozzáadtam egy .txt kiterjesztést, főleg azért, mert a "Save as type" (magyar Windows esetén: "Fájl típusa") combo box üres. Csakúgy mint az OpenFileDialog esetében, ez a doboz a Filter tulajdonságon keresztül vezérelhető, ráadásul pontosan ugyanolyan módon.
saveFileDialog.Filter = "Text file (*.txt)|*.txt|C# file (*.cs)|*.cs";
További információkért a Filter tulajdonság által követelt formátumról, kérlek nézd meg az előző, OpenFileDialog-ról szóló cikket, ahol az részletesen be van mutatva.
Egy, a fent láthatóhoz hasonló szűrővel, az eredményül kapott SaveFileDialog már így fog kinézni:
Ezzel ellátva, már írhatsz be fájlneveket, anélkül, hogy meg kéne add a kiterjesztést - az a szűrő combo box-ban kiválasztott fájltípus alapján lesz meghatározva. Ez emellett azt is jelzi a felhasználónak, hogy mely fájlformátumokat támogatja az alkalmazásod, ami természetesen nagyon fontos.
A kezdeti könyvtár beállítása
A SaveFileDialog által használt kezdőkönyvtár a Windows által kerül meghatározásra, azonban azt az InitialDirectory tulajdonság használatával felülbírálhatod. Az értékét általában egy felhasználó által meghatározott könyvtárra, az alkalmazás könyvtárára vagy esetleg a legutóbb használt könyvtárra fogod állítani. A kívánt elérési utat string formátumban, a következőképp állíthatod be:
saveFileDialog.InitialDirectory = @"c:\temp\";
Amennyiben a speciális Windows könyvtárak egyikét szeretnéd használni, mint például az Asztal, a Dokumentumok vagy a Program Files könyvtár, különös figyelmet kell fordítanod ezek megadására, mivel ezek elérési útja a Windows különböző verziói esetén, valamint az éppen bejelentkezett felhasználótól függően más és más lehet. A .NET keretrendszer azonban segítséget tud nyújtani neked, csak használd az Environment osztályt és annak tagjait, hogy az ilyen speciális könyvtárakkal elbánj.
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Ebben az esetben lekérem a My Documents (Dokumentumok) könyvtár elérési útját, de nézz csak rá a SpecialFolder enumerációra - sok érdekes elérési úthoz találsz benne értékeket. A teljes listáért, kérlek, nézd meg ezt az MSDN cikket.
Egyéb opciók
Az ebben a cikkben már említetteken kívül, fel szeretném hívni a figyelmed a következő tulajdonságokra, amelyek segítenek majd a SaveFileDialog-ot a saját igényeidhez szabni:
AddExtension - alapértelmezett értéke 'true', és meghatározza, hogy a SaveFileDialog automatikusan hozzáadja-e a kiterjesztést a fájlnevekhez, amennyiben a felhasználó nem teszi ezt meg. A kiterjesztés az éppen kiválasztott szűrő alapján lesz meghatározva, kivéve, ha ez nem lehetséges, amely esetben a DefaultExt tulajdonság értéke kerül használatra (amennyiben az meg van adva). Ha szeretnéd, hogy az alkalmazásod képes legyen kiterjesztés nélküli fájlok elmentésére, le kell tiltanod ezt az opciót.
OverwritePrompt - alapértelmezett értéke 'true', és meghatározza, hogy a SaveFileDialog megerősítést kell-e kérjen, amennyiben egy, a felhasználó által beírt fájlnév egy már létező fájl felülírását eredményezné. Nagyon különleges esetektől eltekintve, ezt az opciót érdemes engedélyezni.
Title - felülírhatod ezt a tulajdonságot, amennyiben szerenél egyedi címet adni a dialógusablakodnak. Alapértelmezett értéke "Save As", vagy annak lokalizált megfelelője (magyar Windows esetén: "Mentés másként"), és ez a tulajdonság az OpenFileDialog esetén is működik.
ValidateNames - alapértelmezett értéke 'true', és, hacsak nincs letiltva, biztosítja, hogy a felhasználó csak érvényes, Windows által elfogadott fájlneveket írhasson be, mielőtt továbbléphetne.