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
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
Nie osadza się ich w obszarze formatki tworzonego okna aplikacji lecz tuż pod nim
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
Krok 2. Ustawiamy właściwości wybranych komponentów
Przykładowa zawartość MenuStrip przedstawiona jest poniżej
Jedna z kontrolek GroupBox przechowuje kontrolkę TextBox. Właściwość Dock kontrolki groupBox1 ustawimy na Left
Dla kontrolki groupBox2 właściwość Dock kontrolki groupBox1 ustawimy na Fill
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
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
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
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
A w folderze, w którym znajduje sie plik *.exe naszej aplikacji zostanie utworzony plik tekstowy
Uruchom standardowy notatnik Windows'a i wyczytaj utworzony przez siebie plik. Przykładowy odczyt przedstawia poniższa ilustracja
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.
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;
}
}
}
}