Dodawanie menu, kontrolki TextBox oraz wykorzystanie okien dialogowych open oraz saveFileDialog
Stronę tą wyświetlono już: 1762 razy
Utwórzmy sobie czym prędzej nowy projekt o jakże wymownej nazwie myNotepad. Jak zapewne się domyślacie będzie to prościutki program do edytowania, zapisywania i odczytywania plików tekstowych zapisanych na dysku twardym komputera.
Warto też na wstępie zmienić parę właściwości otrzymanej formy, co też można a nawet trzeba uczynić wykorzystując do tego jakże niecnego celu okno właściwości Properties. W oknie tym należy ustawić pole Text z Form1 na myNotepad, zaś pozycję (Name) z Form1 na myNotepad.
Z okna Toolbox należy wybrać kontrolkę menu o nazwie MenuStrip i dodać doń pozycje menu tak, jak pokazane zostało to na ilustracji poniżej.

Skoro menu zostało już dodane, to czym prędzej dodać należy kontrolkę TextBox, której pole (Name) należy zmienić z textbox1 na tb_text oraz zmienić ustawienie pola ScroolBars z None na Vertical. Do projektu dodajmy jeszcze dwa elementy, czyli kontrolkę okna dialogowego openFileName oraz saveFileName. Projekt okna programu powinien w tej chwili wyglądać w sposób pokazany na poniższej ilustracji.

Ponieważ szerokość okna kontrolki TextBox powinno się zmieniać wraz ze zmianą szerokości okna głównego, więc w trybie graficznym należy zaznaczyć okno główne (formę) a następnie w oknie właściwości Properties kliknąć ikonkę by pokazała się lista dostępnych dla tego okna zdarzeń możliwych do obsługi. Na liście tej niezwłocznie odnaleźć należy pozycję ClientSizeChanged, którą to kliknąć należy dwukrotnie lewym przyciskiem myszy, co spowoduje utworzenie takiego oto kodu:
- private void myNotepad_ClientSizeChanged(object sender, EventArgs e)
- {
- }
który niezwłocznie należy rozszerzyć tak, aby przy każdej zmianie szerokości okna głównego następowało dostosowanie szerokości kontrolki TextBox. Kod po modyfikacjach będzie więc wyglądał w sposób następujący:
- private void myNotepad_ClientSizeChanged(object sender, EventArgs e)
- {
- var s = this.ClientSize; // Pobieram struktorę typu Size, kótra określa wymiary obszaru wewnętrznego okna głównego
- tb_text.Size = new Size(s.Width - tb_text.Left, s.Height - tb_text.Top); // ustawiam szerokość i wysokość okna kontrolki tb_text
- }
Proszę zwrócić uwagę na fakt, że kontrolka o nazwie tb_text jest dostępna w projekcie pod tą samą nazwą jako jej obiekt, do którego oczywiście można a nawet trzeba się odwoływać.
Teraz warto powrócić do projektu kona, rozwinąć listę jakże zaawansowanego menu i kliknąć dwukrotnie lewym przyciskiem myszy pozycję Otwórz, co spowoduje wygenerowanie i przejście do następującego kodu:
- private void otwórzToolStripMenuItem_Click(object sender, EventArgs e)
- {
- }
Kod ten oczywiście czym prędzej zmodyfikować należy i obsłużyć wczytywanie danych z pliku:
- private void otwórzToolStripMenuItem_Click(object sender, EventArgs e)
- {
- openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; // ustawiam filtr plików, jakie można otworzyć
- if (openFileDialog1.ShowDialog() == DialogResult.OK) // wyświetlam modalnie okno dialogowe openFileName i sprawdzam, czy po zamknięciu zwróci mi ono wartość DialogResult.OK
- {
- System.IO.StreamReader stream = new System.IO.StreamReader(openFileDialog1.FileName, true); // tworzę strumień czytający dane z wybranego w oknie dialogowym pliku
- tb_text.Text = stream.ReadToEnd(); // wczytywanie zawartości pliku do kontrolki tb_text
- }
- }
Jak widać, w powyższym kodzie wykorzystałem w przebiegły sposób wcześniej wstawiony obiekt openFileDialog1. Teraz w podobny sposób należy wygenerować kod dla pozycji menu Zapisz. Kod (po wprowadzonych zmianach) powinien wyglądać w następujący sposób:
- private void zapiszToolStripMenuItem_Click(object sender, EventArgs e)
- {
- saveFileDialog1.Filter = "txt files (*.txt)|*.txt";
- if (saveFileDialog1.ShowDialog() == DialogResult.OK)
- {
- System.IO.StreamWriter stream = new System.IO.StreamWriter(saveFileDialog1.FileName, false, Encoding.UTF8);
- stream.Write(tb_text.Text);
- }
- }
Pozostała już do obsłużenia ostatnia pozycja, czyli Zamknij, której kod (oczywiście po wprowadzonych niezbędnych modyfikacjach) powinien wyglądać następująco:
- private void zamknijProgramToolStripMenuItem_Click(object sender, EventArgs e)
- {
- this.Close();
- }
Teraz można skompilować program i cieszyć się z utworzonego pierwszego jakże prostego programu myNotepad.

Tytuł:
Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk

Tytuł:
Jak pisać świetne gry 2D w Unity. Niezależne programowanie w języku C#
Autor:
Jared Halpern

Tytuł:
C# 9.0 w pigułce
Autor:
Joseph Albahari

Tytuł:
C# 9.0. Leksykon kieszonkowy
Autor:
Joseph Albahari, Ben Albahari

Tytuł:
C# 8.0. Kompletny przewodnik dla praktyków. Wydanie VII
Autor:
Mark Michaelis

Tytuł:
C# 8.0 w pigułce
Autor:
Joseph Albahari, Eric Johannsen

Tytuł:
Asynchroniczność i wielowątkowość w języku C#
Autor:
Grzegorz Lang

Tytuł:
C# 8.0. Programowanie. Tworzenie aplikacji Windows, internetowych oraz biurowych
Autor:
Ian Griffiths

Tytuł:
C# 8.0. Leksykon kieszonkowy
Autor:
Joseph Albahari, Ben Albahari

Tytuł:
Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#
Autor:
Dmitri Nesteruk