TOC

This article has been localized into Ukrainian by the community.

Діалогові вікна:

Діалогове вікно для відкриття файлів

Відкриваючи чи зберігайючи файл у будь-якій програмі для Windows ви будете використовувати приблизно одне й те саме діалогове вікно. Це, тому що воно є частиною API Windows

WPF містить діалогові вікна для відкриття та зберігання файлів у просторі імен Microsoft.Win32. У цій статті ми зосередимося на класі OpenFileDialog, зайвдяки якому можна з легкістю дозволити користувачу відкрити один чи кілька файлів.

Простий приклад застосування класу OpenFileDialog

Почнімо з використання класу OpenFileDialog без жодних налаштувань, просто щоб завантажити текст для елементу TextBox:

<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);
		}
	}
}

Як тільки ви натиснете кнопку для відкриття файлу, то одразу побачите відповідне діалогове вікно. Його вигляд буде відрізнятися в залежності від версії та теми Windows:

Метод ShowDialog() повертає змінну типу bool, яка може ще й мати значення null. Якщо користувач вибере файл та натисне "Відкрити", то метод поверне значення True. Для того, щоб отримати повний шлях до файлу слід використати властивість FileName класу OpenFileDialog.

Фільтер

Завичай вам потрібно, щоб користувач міг вибрати лише фали певного типу(ів). Наприклад Word в основному відкриває файли Word (з розширенням .doc чи .docx), а Блокнот текстові файли (з розширенням .txt).

Для того, щоб вказати користувачу, які файли сможна відкрити, виберіть фільтр для класу вашого екземпояру OpenFileDialog. Для цього слід використати властивість Filter, яку можна задати одразу після створення екземпляру, як тут:

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

Ось результат:

Зайважте, що діалогове вікно тепер містить комбінований список для вибору допустимого типу файлів.

На перший погляд, формат рядка для фільтру здається дуже дивним. Однак працює він наступним чином: використовуючи знак "|", ви відділяєте текст, який бачить користувач, від тексту призначеного для зчитування компілятором в якості розширення файлу. При виборі кількох форматів вони також розділяються цим знаком.

Підсумуймо: наступний приклад означає, що нам потрібні .txt файли. Перша частина повідомляє користувачу, що він може вибрати лише файли цього типу. Друга, своєю чергою, повідомляє вікно про те, що слід показувати лише ці файли.

Text files (*.txt)|*.txt

Файли будь-якого типу можуть мати різні розширення. Наприклад: зображення можуть мати як розширення JPEG, так і PNG. Ось, як їх відфільтрувати:

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

Просто відділять розширення крапкою з комою. Це обов'язково треба зробити у частині для компілятора, а в першій можна писати все, що ви хочете. Однак більшість розробників використовують однаковий формат для них обох.

Вибір початкової папки

Початкову папку для цього діалогового вікна, за ймовчуванням, визначає Windows, але ви можете вибрати її вручну завдяки властивості InitialDirectory. Зазвичай ви вибиратимете папку, задану користувачем, папку застосунку або останню використану папку. Загалом її можна вказати в форматі рядка, як тут:

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

Якщо вам потрібно вибрати одну з системних папок Windows, наприклад: робочий стіл, документи чи Файли програм, то краще не вибирати їх вручну, оскільки їхнє розташування може сильно відрізнятися в залежності від користувача. На щастя, для вирішення такиж проблем, .NET framework містить клас Environment.

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

В цьому прикладі я отримав шлях до папки документи. Ось стаття з офіційної документацій Microsoft, що містить повний перелік всіх спеціальних папок, які можна відкрити завдяки класу Enviroment.

Декілька файлів

Якщо вам потрібно, щоб це діалогове вікно давало можливіть вибрати декілька файлів за раз, то встановіть значення True для властивості Multiselect. Ми зробили це в наступному прикладі, а ще в ньому застосовано всі інші методики, про які розказано у статті:

<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));
			}
		}
	}
}

Якщо ви запустите цей код, то побачите, що тепер ви можете вибрати кілька файлів в одній папці, затиснувши Ctrl чи Shift та натиснувши ЛКМ. Після вибору файлів, застосунок просто додає шляд до них до елементу ListBox, використовуючи властивість FileNames.

Підсумок

Як ви бачите, у WPF дуже легко використовувати ділогові вікна для відкриття файлів. Пам'ятайте, що у прикладах, для зменшення кількості коду, не здіюснювалася перевірка на наявність помилок. У реальних ситуаціях обо'вязково зробіть її, оскільки при роботі з файлами може виникнути чимало проблем.


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!