TOC

This article has been localized into Hungarian by the community.

Dialógusablakok:

Az OpenFileDialog dialógusablak

Akármikor megnyitsz vagy elmentesz egy fájlt szinte bármely Windows-os alkalmazásban, nagyjából ugyanazokat a dialógusablakokat fogod látni. Ennek oka persze az, hogy ezek a dialógusablakok részei a Windows API-nak, és ezáltal elérhetőek a fejlesztők számára a Windows platformon.

A WPF esetében találhatsz sima dialógusablakokat mind fájlok megnyitására, mind azok elmentésére a Microsoft.Win32 névtérben. Ebben a cikkben az OpenFileDialog osztályra fogunk koncentrálni, amely nagyon egyszerűvé teszi egy vagy több fájl megnyitására szolgáló dialógusablakok megjelenítését.

Egyszerű OpenFileDialog példa

Kezdjük a dolgot az OpenFileDialog bármilyen extra opciót mellőző használatával, ahhoz, hogy betöltsük egy fájl tartalmát egy TextBox vezérlőbe:

<Window x:Class="WpfTutorialSamples.Dialogs.OpenFileDialogSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="OpenFileDialogSample" Height="300" Width="300">
    <DockPanel Margin="10">
        <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
            <Button Name="btnOpenFile" Click="btnOpenFile_Click">Open file</Button>
        </WrapPanel>
        <TextBox Name="txtEditor" />
    </DockPanel>
</Window>
using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;

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

		private void btnOpenFile_Click(object sender, RoutedEventArgs e)
		{
			OpenFileDialog openFileDialog = new OpenFileDialog();
			if(openFileDialog.ShowDialog() == true)
				txtEditor.Text = File.ReadAllText(openFileDialog.FileName);
		}
	}
}

Amikor megnyomod az "Open file" ("Fájl megnyitása") gombot, az OpenFileDialog példányosításra és megjelenítésre kerül. Attól függően, hogy a Windows melyik verzióját, és annak melyik témáját használod, valahogy így fog kinézni:

A ShowDialog() függvény egy nullable (null-képes/nullozható) boolean (logikai) értéket ad vissza, ami azt jelenti, hogy felveheti "false" ("hamis") és "true" ("igaz") értékeket, valamint lehet üres ("null") is. Ha a felhasználó kijelöl egy fájlt és megnyomja az "Open" ("Megnyitás") gombot, a visszatérési érték "True" lesz, és ebben az esetben megpróbáljuk betölteni a fájl tartalmát a TextBox vezérlőbe. A kijelölt fájl teljes elérési útját az OpenFileDialog FileName tulajdonságának lekérésével kaphatjuk meg.

Szűrő

Alapesetben, amikor azt szeretnéd, hogy a felhasználó megnyisson egy fájlt az applikációdban, a választható fájltípusok körét is szeretnéd leszűkíteni. Például: A Word általában Word fájlokat (.doc vagy .docx kiterjesztésű fájlok), a Notepad (Jegyzettömb) pedig szöveges fájlokat (.txt kiterjesztésű fájlok) nyit meg.

Meghatározhatsz egy szűrőt az OpenFileDialog számára, amivel jelzed a felhasználó felé, hogy milyen típusú fájlokat kéne megnyissanak a programodban, és ezzel egy időben leszűkíted a megjelenített fájlok halmazát a jobb átláthatóság érdekében. Ez a Filter tulajdonsággal érhető el, amelyet hozzá is adhatunk a fönti példához, rögtön azután, hogy inicializáltuk a dialógusablakot; valahogy így:

openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";

Íme az eredmény:

Vedd észre, hogy a dialógusablak immár rendelkezik egy combo box-szal a fájltípusok kiválasztására, valamint, hogy a megjelenített fájlok köre csak a kiválasztott fájltípushoz tartozó kiterjesztésekkel rendelkező fájlokból áll.

A szűréshez tartozó formátum talán egy kissé furának tűnik első ránézésre, azonban nem áll másból, mint a kiterjesztések egy emberek által is olvasható, majd egy, a gép által egyszerűen értelmezhető verzióban való megadásából, egy cső (|) karakter által elválasztva egymástól. Amennyiben több fájltípust is szeretnél megadni - mint ahogyan az a fenti példában is szerepel - az egyes fájltípusokhoz tartozó információk halmazát is a cső karakterrel lehet elválasztani.

Tehát összesítve, a következő sor első része azt jelenti, hogy szeretnénk a választható fájltípust "Text files (*.txt)"-nek elnevezni (ahol a kiterjesztés a zárójelek között csak a felhasználó kényelmére szolgál, annak érdekében, hogy tudják, milyen kiterjesztések tartoznak az elfogadottak közé), míg a második része megmondja a dialógusablaknak, hogy csak a .txt kiterjesztésű fájlokat mutassa.

Text files (*.txt)|*.txt

Minden fájltípushoz tartozhat persze több kiterjesztés is. Például képfájlok esetében elfogadottak lehetnek a JPEG és a PNG fájlok is, a következőképp:

openFileDialog.Filter = "Image files (*.png;*.jpeg)|*.png;*.jpeg|All files (*.*)|*.*";

Egyszerűen válassz el minden kiterjesztést pontosvesszőkkel egymástól a második részben (a számítógép számára megadott rész) - az első részben úgy formázhatod őket, ahogyan szeretnéd, ám a legtöbb fejlesztő ugyanazt a jelölést alkalmazza mindkét részben, ahogyan az a fenti példában is látható.

A kezdeti könyvtár beállítása

Az OpenFileDialog által használt kezdeti könyvtár a Windows által kerül meghatározásra, ám azt az InitialDirectory tulajdonság használatával felülbírálhatod. Általában ezt az értéket egy, a felhasználó által meghatározott mappára, az alkalmazás mappájára, vagy esetleg a legutóbb használt mappára állítjuk. Egy string-ként formázott elérési útra a következőképp állíthatod be:

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

Ha szeretnél egy speciális Windows könyvtárat használni, mint például az Asztal, a Dokumentumok vagy a Program Files, különös figyelmet kell fordítanod arra, hogy ezek elérése változó lehet minden Windows verzió esetén, és attól is függhet, hogy épp mely felhasználó van bejelentkezve. A .NET keretrendszer azonban el tud látni segítséggel; csak használd az Environment osztályt és annak tagjait, hogy elérd ezeket a speciális mappákat:

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

Ebben az esetben a My Documents (Dokumentumok) mappa elérési útját kérem le, de nézd meg a SpecialFolder enumerációt - sok-sok érdekes elérési úthoz tartalmaz értékeket. A teljes listáért kérlek, nézd meg ezt: MSDN cikk

Több fájl

Amennyiben az alkalmazásod több egyszerre megnyitott fájlt is támogat, vagy csak egyszerűen szeretnéd arra használni az OpenFileDialog-ot, hogy több fájlt is kijelölj, engedélyezned kell a Multiselect tulajdonságot. A következő példában épp ezt csináltuk, és udvariasságként, kedves olvasó, emellett az összes feljebb említett technikát is alkalmaztuk, beleértve a szűrést és a kezdeti könyvtár beállítását:

<Window x:Class="WpfTutorialSamples.Dialogs.OpenFileDialogMultipleFilesSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="OpenFileDialogMultipleFilesSample" Height="300" Width="300">
    <DockPanel Margin="10">
        <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
            <Button Name="btnOpenFile" Click="btnOpenFiles_Click">Open files</Button>
        </WrapPanel>
        <ListBox Name="lbFiles" />
    </DockPanel>
</Window>
using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;

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

		private void btnOpenFiles_Click(object sender, RoutedEventArgs e)
		{
			OpenFileDialog openFileDialog = new OpenFileDialog();
			openFileDialog.Multiselect = true;
			openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
			openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
			if(openFileDialog.ShowDialog() == true)
			{
				foreach(string filename in openFileDialog.FileNames)
					lbFiles.Items.Add(Path.GetFileName(filename));
			}
		}
	}
}

Ha leteszteled ezt a kódot, látni fogod, hogy most már több fájlt is ki tudsz jelölni egy mappában, a Ctrl vagy Shift billentyű nyomva tartásával, és az ezalatt fájlokra való kattintással. A kijelölt fájlok elfogadása után ez a példa egyszerűen hozzáadja a fájlok nevét egy ListBox vezérlőhöz, a FileNames tulajdonságon való végigiterálással.

Összegzés

Amint látod, az OpenFileDialog használata WPF-ben nagyon könnyű, és rengeteg munkát megspórol neked. Kérlek vedd észre, hogy annak érdekében, hogy a kódsorok mennyisége minimális legyen, nincs kivételkezelés alkalmazva ezekben a példákban. Amikor fájlokkal, vagy úgy általánosságban IO műveletekkel dolgozol, mindig érdemes figyelned a kivételekre (exception-ök), mivel igen könnyen kaphatsz egyet egy zárolt fájl, nem létező elérési út, vagy hasonló probléma miatt.


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!