Dodawanie menu, kontrolki TextBox oraz wykorzystanie okien dialogowych open oraz saveFileDialog

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2331 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.

Pozycje menu programu myNotepad
Rys. 1
Pozycje menu programu myNotepad

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.

Widok okna programu myNotepad
Rys. 2
Widok projektu okna programu myNotepad

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ę events 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.

Propozycje książek