Okna dialogu zapisu i odczytu plików
Jest wiele sposobów rozwiązań zapisu i odczytu plików danych i graficznych. Ten temat będzie oparty na kontrolkach SaveFileDialog i OpenFileDialog
Cel: Utwórz aplikację pozwalająca odczytać i zapisać dowolny plik tekstowy oraz wczytać plik graficzny o rozszerzeniach *.bmp. *.jpg, *.png i *.ico
![Okna dialogu zapisu i odczytu plików visula studio c#](./g-VS/p16-0.png)
Krok 1. Układ komponentów
- GroupBox- sztuk 2
- MenuStrip- sztuk 1
- StatusStrip- sztuk 1
- TextBox- sztuk 1
- Panel- sztuk 1
- PictureBox- sztuk 1
- SaveFileDialog- sztuk 1
- OpenFileDialog- sztuk 1
Uwaga: Kontrolki SaveFileDialog i OpenFileDialog są kontrolkami niewizualnymi. W Przyborniku znajdują się w grupie Okna dialogowe
![SaveFileDialog visual studio c#](./g-VS/p16-8.png)
Nie osadza się ich w obszarze formatki tworzonego okna aplikacji lecz tuż pod nim
![osadza się ich w obszarze formatki tworzonego okna aplikacji lecz tuż pod nim](./g-VS/p16-9.png)
Osadzając kolejne kontrolki należy kontrolkę TextBox osadzić w jednej z kontrolek GroupBox, a kontrolkę Panel w drugiej kontrolce GroupBox. Kontrolka PictureBox osadzona jest wewnątrz kontrolki Panel
![kontrolkę TextBox Visual Studio C#](./g-VS/p16-1.png)
Krok 2. Ustawiamy właściwości wybranych komponentów
Przykładowa zawartość MenuStrip przedstawiona jest poniżej
![zawartość MenuStrip visula studio](./g-VS/p16-1a.png)
Jedna z kontrolek GroupBox przechowuje kontrolkę TextBox. Właściwość Dock kontrolki groupBox1 ustawimy na Left
![Dock Visual Studio c#](./g-VS/p16-2.png)
Dla kontrolki groupBox2 właściwość Dock kontrolki groupBox1 ustawimy na Fill
![kontrolki groupBox2 właściwość Dock kontrolki groupBox1 ustawimy na Fill visual studio c#](./g-VS/p16-3.png)
Kontrolka textBox1 jest wypełnieniem kontrolki groupBox1 i będzie służyć do wyprowadzenia zawartości wczytanego pliku tekstowego lub do pisania dowolnego tekstu na zasadach notatnika Windows'a.
Jej tryb pracy ustawimy jako wieloliniowy, czyli właściwości Multiline przypiszemy wartość True
![Multiline przypiszemy wartość True visual studio c#](./g-VS/p16-5.png)
Spodziewamy się nieokreślonej wielkości wczytywanych plików tekstowych, stąd aby móc przeglądać ich zawartość powinniśmy mieć belki przewijania. Ustawiamy właściwość ScrollBars dla kontrolki textBox1
![ScrollBars true visual studio c#](./g-VS/p16-6.png)
Dla kontrolki panel1 właściwość Dock ustawimy na Fill, jednocześnie wywołamy w niej możliwość przewijania poprzez ustawienie właściwości AutoScroll na True
![właściwość Dock ustawimy na Fill](./g-VS/p16-7a.png)
Skompiluj i uruchom projekt
Krok 3. Przygotowanie zapisu i odczytu plików z poziomu naszej aplikacji
Aby można było pracować z plikami należy zainicjować przestrzeń nazw System.IO, która zawiera typy umożliwiające odczytywanie i zapisywanie do plików i strumieni danych. Do kodu dodajemy System.IO
Wskazówka:
using System;
using System.IO;
W zdarzeniu Load formatki Form1 ustawiamy ścieżkę pierwszego otwarcia okien dialogowych zapisu i odczytu plików
Wskazówka:
private void Form1_Load(object sender, EventArgs e)
{
//ustawa katalog zapisu na katalog z którego uruchomiono aplikację
saveFileDialog1.InitialDirectory = Environment.CurrentDirectory;
openFileDialog1.InitialDirectory = Environment.CurrentDirectory;
}
Krok 4. Zapisujemy plik tekstowy w wybranej lokalizacji dysku
Okna dialogowe ułatwiające zapis i odczyt zawierają szereg przydatnych funkcji związanych na przykład z filtrowaniem zawartości dysku komputera itp. W zdarzeniu Click opcji menu wprowadzimy poniższy kod. Kod zawiera komentarz ułatwiający zrozumienie przeznaczenia poszczególnych wierszy. Dodatkowo ścieżkę zapisywanego pliku wyświetlimy w toolStripStatusLabel1
Wskazówka:
private void ZapiszToolStripMenuItem_Click(object sender, EventArgs e)
{
//przykład zapisu zawartośći kontrolki textbox1 do pliku tekstowego
//ustaw filtr plików
saveFileDialog1.Filter = "Pliki tekstowe .txt|*.txt|Wszystkie pliki *.*|*.*";
//ustaw tytuł okna zapisu dialogowego
saveFileDialog1.Title = "Zapisz zawartość";
//narzuć filtr podstawowy
saveFileDialog1.DefaultExt = "txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamWriter plik = new StreamWriter(saveFileDialog1.FileName,false);
plik.WriteLine(textBox1.Text);
plik.Close();
toolStripStatusLabel1.Text = saveFileDialog1.FileName;
}
}
Skompiluj i uruchom program. Sprawdź efekt działania.
Prawidłowo działająca aplikacja pozwala otworzyć okno dialogowe zapisu pliku
![aplikacja pozwala otworzyć okno dialogowe zapisu pliku](./g-VS/p16-10.png)
A w folderze, w którym znajduje sie plik *.exe naszej aplikacji zostanie utworzony plik tekstowy
![zapis do pliku tekstowego visual studio c#](./g-VS/p16-11.png)
Uruchom standardowy notatnik Windows'a i wyczytaj utworzony przez siebie plik. Przykładowy odczyt przedstawia poniższa ilustracja
![plik teskstowy c#](./g-VS/p16-12.png)
Krok 5. Wczytujemy plik tekstowy
W zdarzeniu Click funkcji menu otwarcia pliku przypisujemy poniższy kod. Ścieżkę wczytanego pliku pokażemy w toolStripStatusLabel1
Wskazówka:
private void OtworzToolStripMenuItem_Click(object sender, EventArgs e)
{
//ustaw filtr plików
openFileDialog1.Filter = "Pliki tekstowe .txt|*.txt|Wszystkie pliki *.*|*.*";
//ustaw tytuł okna zapisu dialogowego
openFileDialog1.Title = "Otwórz plik";
//narzuć filtr podstawowy
openFileDialog1.DefaultExt = "txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = null;
StreamReader plik = new StreamReader(openFileDialog1.FileName);
string linia;
while ((linia = plik.ReadLine()) != null)
{
textBox1.AppendText(linia);
}
plik.Close();
toolStripStatusLabel1.Text = openFileDialog1.FileName;
}
}
Skompiluj i uruchom program. Sprawdź efekt działania.
Krok 6. Wczytanie pliku grafiki
Opcje wczytania pliku graficznego wiążą się ze zmianą filtru okna dialogowego otwarcia plików. Realizację ładowania grafiki do kontrolki pictureBox1 wykonamy w jej zdarzeniu Click przez wykonanie poniższego kodu. Ten kod pozwala wczytac pliki graficzne typu jpg, png, bmp i ico.
Wskazówka:
private void PictureBox1_Click(object sender, EventArgs e)
{
//ustaw filtr plików
openFileDialog1.Filter = "Pliki bmp .bmp|*.bmp|Pliki jpg .jpg|*.jpg| Pliki png .png|*.png| Pliki ikon .ico|*.ico";
//ustaw tytuł okna zapisu dialogowego
openFileDialog1.Title = "Otwórz plik obrazu";
//narzuć filtr podstawowy
openFileDialog1.DefaultExt = "png";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
toolStripStatusLabel1.Text = openFileDialog1.FileName;
}
}
Skompiluj i uruchom program. Sprawdź efekt działania.
![wczytany plik *.ico Visual Studio C#](./g-VS/p16-0.png)
Pełny kod utworzonej aplikacji
Wskazówka:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace dialogZapisuOdczytuPliku16
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ZamknijToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void ZapiszToolStripMenuItem_Click(object sender, EventArgs e)
{
//przykład zapisu zawartośći kontrolki textbox1 do pliku tekstowego
//ustaw filtr plików
saveFileDialog1.Filter = "Pliki tekstowe .txt|*.txt|Wszystkie pliki *.*|*.*";
//ustaw tytuł okna zapisu dialogowego
saveFileDialog1.Title = "Zapisz zawartość";
//narzuć filtr podstawowy
saveFileDialog1.DefaultExt = "txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamWriter plik = new StreamWriter(saveFileDialog1.FileName,false);
plik.WriteLine(textBox1.Text);
plik.Close();
toolStripStatusLabel1.Text = saveFileDialog1.FileName;
}
}
private void OtworzToolStripMenuItem_Click(object sender, EventArgs e)
{
//ustaw filtr plików
openFileDialog1.Filter = "Pliki tekstowe .txt|*.txt|Wszystkie pliki *.*|*.*";
//ustaw tytuł okna zapisu dialogowego
openFileDialog1.Title = "Otwórz plik";
//narzuć filtr podstawowy
openFileDialog1.DefaultExt = "txt";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = null;
StreamReader plik = new StreamReader(openFileDialog1.FileName);
string linia;
while ((linia = plik.ReadLine()) != null)
{
textBox1.AppendText(linia);
}
plik.Close();
toolStripStatusLabel1.Text = openFileDialog1.FileName;
}
}
private void Form1_Load(object sender, EventArgs e)
{
//ustawa katalog zapisu na katalog z którego uruchomiono aplikację
saveFileDialog1.InitialDirectory = Environment.CurrentDirectory;
openFileDialog1.InitialDirectory = Environment.CurrentDirectory;
}
private void PictureBox1_Click(object sender, EventArgs e)
{
//ustaw filtr plików
openFileDialog1.Filter = "Pliki bmp .bmp|*.bmp|Pliki jpg .jpg|*.jpg| Pliki png .png|*.png| Pliki ikon .ico|*.ico";
//ustaw tytuł okna zapisu dialogowego
openFileDialog1.Title = "Otwórz plik obrazu";
//narzuć filtr podstawowy
openFileDialog1.DefaultExt = "png";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
toolStripStatusLabel1.Text = openFileDialog1.FileName;
}
}
}
}