Aplikacja notatnik. Opracował: Damian Krzesimowski



Podobne dokumenty
private void pasekstanutoolstripmenuitem_click(object sender, EventArgs e) { statusstrip1.visible = pasekstanutoolstripmenuitem.

Notatnik w Windows Forms

Dodanie nowej formy do projektu polega na:

Metodyka programowania. Edytor tekstu. Specyfikacja

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1

Temat: Organizacja skoroszytów i arkuszy

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Cel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)

Płace VULCAN. Jak na podstawie wbudowanego szablonu utworzyć własny szablon wydruku seryjnego?

Zaawansowane aplikacje internetowe - laboratorium

Wykład 10 Kolekcje, pliki tekstowe, c.d. Przykład: Notatnik

private: System::Void button1_click(system::object^ sender, System::EventArgs^ e) {

Podstawowe kontrolki graficzne. Obsługa plików poprzez kontrolki

Kadry VULCAN, Płace VULCAN

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.1

Ćwiczenie 5 Menu programu

Kolory elementów. Kolory elementów

Wykład 7 Okna dialogowe, menu, pasek stanu itp.

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Podstawowe czynnos ci w programie Word

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Zadanie 11. Przygotowanie publikacji do wydrukowania

Laboratorium 8 ( Android -pierwsza aplikacja)

Programowanie Wizualno Obiektowe - zajęcia 2 (PWO_BCPP_2_2) Tworzenie i kompilowanie projektów Programowanie Wizualno Obiektowe Zajęcia 2, część 2

Ćwiczenia 9 - Swing - część 1

Zadanie. Menu Plik niech posiada dwie pozycje: Tekstowy i Excel, a każda z nich niech posiada dwie pozycje Otwórz i Zapisz, patrz rys. 2.

5.2. Pierwsze kroki z bazami danych

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Kadry Optivum, Płace Optivum

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

Wyjątki i obsługa błędów

Zadanie 10. Stosowanie dokumentu głównego do organizowania dużych projektów

Laboratorium 050. Crystal Reports. Ćwiczenie 1. Otwarte pozycje

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Podstawy informatyki

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word)

BAZY DANYCH Panel sterujący

Zasady Programowania (Projektowanie) C++ - część 6 1/9 Programowanie Wizualno Obiektowe (3)

Access - Aplikacja. Tworzenie bazy danych w postaci aplikacji

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

Zadanie 9. Projektowanie stron dokumentu

Informatyka II. Laboratorium Aplikacja okienkowa

Tworzenie okna dialogowego w edytorze raportu SigmaNEST. część 1

Dlaczego stosujemy edytory tekstu?

Programowanie Obiektowe GUI

Dokładny opis instalacji programów RFD można znaleźć w pliku PDF udostępnionym na stronie w zakładce Downland > AutoCAD > Instalacja

Technologie informacyjne

Tworzenie prezentacji w MS PowerPoint

Formatowanie tekstu za pomocą zdefiniowanych stylów. Włączanie okna stylów. 1. zaznaczyć tekst, który chcemy formatować

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Klawiatura. Klawisze specjalne. Klawisze specjalne. klawisze funkcyjne. Klawisze. klawisze numeryczne. sterowania kursorem. klawisze alfanumeryczne

Automatyzowanie zadan przy uz yciu makr języka Visual Basic

UONET+ - moduł Sekretariat

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Prosta książka telefoniczna z wykorzystaniem zapisu do pliku

UONET+ - moduł Sekretariat. Jak wykorzystać wydruki list w formacie XLS do analizy danych uczniów?

Podręcznik użytkownika programu. Ceremonia 3.1

Rozwiązanie ćwiczenia 7a

16) Wprowadzenie do raportowania Rave

Europejski Certyfikat Umiejętności Komputerowych. Moduł 3 Przetwarzanie tekstów

Europejski Certyfikat Umiejętności Komputerowych. Moduł 3 Przetwarzanie tekstów

Instrukcja laboratoryjna nr.4

Jak przygotować pokaz album w Logomocji

Programowanie w środowisku graficznym GUI

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Plan lekcji Optivum. 1. W programie Plan lekcji Optivum otwórz plik z ułożonym planem lekcji.

Jak utworzyć raport kasowy?

Przykładowa dostępna aplikacja w Visual Studio - krok po kroku

Aplikacje WWW - laboratorium

Laboratorium - Narzędzia linii uruchamiania w systemie Windows 7

Zadanie 1. Stosowanie stylów

Zadanie 8. Dołączanie obiektów

Przewodnik Szybki start

Dodawanie stron do zakładek

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Zastanawiałeś się może, dlaczego Twój współpracownik,

Wstęp - Prosta aplikacja internetowa w technologii Java EE 5. Programowanie komponentowe 1

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

Przypisy i przypisy końcowe

Zgrywus dla Windows v 1.12

WOJEWÓDZTWO PODKARPACKIE

Dodawanie stron do zakładek

System Informatyczny CELAB. Terminy, alarmy

Wprowadzenie do systemu Delphi

Edytor tekstu MS Office Word

Włączanie/wyłączanie paska menu

Metodyka programowania. Edytor tekstu. Komponenty edytora

5. Kliknij teraz na ten prostokąt. Powinieneś w jego miejsce otrzymać napis. Jednocześnie została wywołana kolejna pozycja menu.

Celem ćwiczenia jest zapoznanie się z podstawowymi funkcjami i pojęciami związanymi ze środowiskiem AutoCAD 2012 w polskiej wersji językowej.

Cel: Zastosowanie okien pytającychwyświetlających pytania i komunikaty (MessageBox). Klub IKS

UMOWY INSTRUKCJA STANOWISKOWA

MS Access formularze

Jak napisaś edytor tekstowy w Delphi (wersja Delphi 2009)

Transkrypt:

Aplikacja notatnik 1. Tworzenie nowego projektu aplikacji i jej interfejsu W środowisku Visual Studio wciśnij kombinację klawiszy Ctrl+Shift+N. W oknie New Project: - zaznacz pozycję Visual Basic, Windows Form Application; - w polu Name wpisz nazwię aplikacji Notatnik; - kliknij OK. Następnie w widoku projektowania (zakładka Form1.vb [Design]) w palecie komponentów (podokno Toolbox), w kategorii Common Controls odnajdź komponent TextBox i umieść go na powierzchni formy. Zaznacz dodany do formy komponent i w oknie własności (klawisz F4 lub Win+P): - przełącz okno własności do widoku w kategoriach (przycisk Categorized); - w grupie Behavior zmień własność Multiline na True; - w grupie Layout odnajdź własność Dock; z własnością tą związane jest proste okno dialogowe, które pozwala na wybór położenia komponentu na formie; wybierz Fill pole tekstowe wypełni całą dostępną przestrzeń okna; - zmień jeszcze widoczną w grupie Appearance własność ScrollBars na Both. Dzięki ustawieniu własności Dock nie musisz się martwić o zachowanie pola tekstowego w razie zmiany rozmiaru formy przez użytkownika komponent powinien zmieniać swój rozmiar tak, żeby dopasować go do nowego rozmiaru okna. 1/12

2. Zmiana nazwy okna W widoku projektowania zaznacz klasę okna Form1 i przejdź do listy własności na zakładce Properties. Odnajdź własność Text formy i w związanym z nią polu edycyjnym wpisz Notatnik. Naciśnij Enter, aby potwierdzić zmianę. 3. Zmiana ikony okna i aplikacji Na komputer lokalny ściągnij dowolny zestaw ikon o rozszerzeniu.ico. Ponownie zaznacz obiekt okna Form1, klikając jego pasek tytułu w podglądzie. Odnajdź jego własność Icon w grupie Window Style i kliknij przycisk z trzema kropkami. Otworzy się standardowe okno dialogowe, w którym możesz wskazać plik o rozszerzeniu.ico. Zostanie z niego pobrana ikona wyświetlana na pasku tytułu formy. Klikając Otwórz, wybierz plik i zamknij okno dialogowe. Następnie z menu Project wybierz pozycję Notatnik Properties. Pojawi się zakładka Notatnik, na której w rozwijanej liście Icon wybierz pozycję <Browse >. Ponownie zobaczysz okno dialogowe wyboru pliku, w którym wyboerz plik zawierający ikonę aplikacji, włączoną do skompilowanego pliku.exe. Kliknij Otwórz, aby zamknąć okno dialogowe. Teraz zamknij zakładkę z własnościami projektu i naciśnij klawisz F6, aby zbudować cały projekt, a następnie F5, aby go uruchomić. 4. Pasek stanu Dodaj do okna pasek stanu, czyli komponent StatusStrip z grupy Menus & Toolbars. Jego własność Dock jest automatycznie ustawiona na Bottom. Powstanie obiekt StatusStrip1. Zaznacz go. W oknie własności odnajdź własność Items i kliknij przycisk z wielokropkiem, aby uruchomić edytor kolekcji. W oknie Items Collection Editor z rozwijanego menu z lewej strony wybierz IStatusLabel i kliknij przycisk Add. W ten sposób dodasz do paska stanu pole tekstowe. Nie zamykając edytora, zaznacz element ToolStripStatusLabel1 na lewej liście za pomocą lokalnego okna własności i zmień jego własność Text na Brak pliku. Kliknij OK, aby zamknąć edytor. 2/12

5. Menu główne aplikacji W widoku projektowania, w podoknie Toolbox, w grupie Menus & Toolbars zaznacz komponent MenuStrip i umieść go na formie. Podobnie jak komponent paska stanu, także i ten komponent znajdziesz na dodatkowym pasku pod podglądem formy. Komponent ten reprezentowany jest także na podglądzie formy podgląd ów jest zarazem edytorem menu. Po wstawieniu menu sposób ułożenia pola edycyjnego TextBox1 względem okna może nie działać prawidłowo, ponieważ menu ułożone jest niejako nad polem edycyjnym i przesłania jego górną część. W takiej sytuacji zaznacz pole edycyjne i z jego menu kontekstowego wybierz polecenie Bring to Front. Jeżeli komponent MenuStrip1 jest zaznaczony, w podglądzie okna staje się widoczny całkiem wygodny edytor. Miejsce, w którym możesz wpisać nazwę podmenu, jest oznaczone napisem Type Here. Wprowadź nazwę pierwszego podmenu: &Plik. Po rozpoczęciu pisania natychmiast pojawią się dodatkowe miejsca, pozwalające na utworzenie kolejnego podmenu oraz pierwszej pozycji w podmenu Plik. W podmenu Plik umieść cztery pozycje: &Otwórz, &Zapisz jako, separator (należy wpisać pojedynczy znak myślnika), Zamknij. Następnie dodaj podmenu &Edycja z pozycjami Cofnij, Wytnij, Kopiuj, Wklej, Usuń oraz Zaznacz wszystko. W razie kłopotów z edycją nowego podmenu możesz użyć klawisza Tab do przejścia do odpowiedniej pozycji w edytorze menu. Dodaj także podmenu &Widok, w którym możesz umieścić pozycje &Czcionka, &Tło i Pasek &stanu. Następnie zaznacz w edytorze pozycję Otwórz i w oknie własności odnajdź pozycję ShortcutKeys. Po uruchomieniu edytora tej własności zaznacz w nim opcję Ctrl, a z rozwijalnego menu wybierz O. Analogicznie powiąż z pozycją Zapisz jako kombinację klawiszy Ctrl+S. 3/12

Umieszczony w nazwie pozycji menu znak & wskazuje na aktywny klawisz ale nie jest to jego definicja, a jedynie informacja. 6. Metoda zdarzeniowa zamykająca aplikację W widoku projektowania, na podglądzie formy kliknij dwukrotnie pozycję menu Zamknij. W powstałej w ten sposób metodzie zdarzeniowej wpisz polecenie Close(): Private Sub ZamknijToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZamknijToolStripMenuItem.Click Close() Polecenie Close() umieszczone w metodzie ZamknijToolStripMenuItemClick jest wywołaniem metody formy, a więc metody instancji klasy Form1, do której dostęp masz przez referencję Me. 7. Potwierdzenie zamknięcia aplikacji Przejdź do widoku projektowania i za pomocą podokna Properties utwórz metodę zdarzeniową do zdarzenia FormClosing (zakładka Events z ikoną błyskawicy). Umieść w niej polecenie wyświetlające komunikat z odpowiednim pytaniem. Nie dysponujesz jeszcze metodą zapisującą tekst do pliku, więc w odpowiednim miejscu metody Form1_FormClosing wstaw tymczasowe polecenie wyświetlające komunikat, który ma przypominać o uzupełnieniu kodu. Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing Dim dr As DialogResult = MessageBox.Show("Czy zapisać zmiany w edytowanym dokumencie?", Me.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3) Select Case dr Case DialogResult.Yes MessageBox.Show("Wstawić wywołanie metody zapisującej zawartość notatnika do pliku") Case DialogResult.No Case DialogResult.Cancel e.cancel = True Case Else e.cancel = True End Select Pytanie o zachowanie dokumentu nie ma sensu, jeżeli nie został zmieniony po otwarciu aplikacji lub po jego ostatnim zapisaniu na dysku. Dlatego warto w klasie Form1 zdefiniować pole typu Boolean, którego wartość będzie ustalana na True w przypadku modyfikacji zawartości notatnika (zdarzenie TextChanged komponentu TextBox). Jeżeli podczas zamykania formy jest ono równe False, komunikat z pytaniem nie zostanie pokazany (zdefiniuj funkcję warunkową). 8. Zamykanie aplikacji przyciskiem Esc Aktywuj widok projektowania (Shift+F7). Zaznacz formę i w oknie własności na zakładce Properties zmień własność KeyPreview formy na True. Zmień zakładkę na Events i kliknij dwukrotnie pole przy zdarzeniu KeyPress. W utworzonej w ten sposób metodzie zdarzeniowej umieść polecenie: If e.keychar = Chr(27) Then Close() Klawiszowi Esc nie odpowiada żaden znak alfabetu, ale posiada on kod w tablicy ASCII o numerze 27. 4/12

9. Ukrywanie i pokazywanie paska stanu (polecenie w menu) Wróć do podglądu formy i kliknij dwukrotnie pozycję Pasek stanu z menu Widok. Utworzysz w ten sposób metodę zdarzeniową, w której umieścisz polecenia: Private Sub PasekstanuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PasekstanuToolStripMenuItem.Click PasekstanuToolStripMenuItem.Checked = Not PasekstanuToolStripMenuItem.Checked StatusStrip1.Visible = PasekstanuToolStripMenuItem.Checked Jeszcze raz wróć do podglądu formy i zaznacz pozycję Pasek stanu w menu Widok. Za pomocą okna własności ustal wartość początkową własności Checkes na True (lub zmień wartość własności CheckState na Checked). 10. Odczytywanie tekstu z pliku Przejdź do edytora kodu (F7). Do zbioru deklaracji przestrzeni nazw na początku pliku dodaj: Imports System.IO W klasie Form1 umieść kod metody z listingu: Public Shared Function CzytajPlikTekstowy(nazwaPliku As String) As String() Dim tekst As List(Of String) = New List(Of String) Try Using sr As StreamReader = New StreamReader(nazwaPliku) Dim wiersz As String = sr.readline() While Not wiersz Is Nothing tekst.add(wiersz) wiersz = sr.readline() End While sr.close() Return tekst.toarray() End Using Catch e As Exception MessageBox.Show("Błąd odczytu pliku " & nazwapliku & " (" & ex.message & ")") Return Nothing End Try End Function Do gromadzenia i przechowywania tekstu wewnątrz metody korzystasz z typu ogólnego List, sparametryzowanego typem String. Każdy łańcuch przechowuje osobny wiersz odczytanego z pliku tekstu. W przypadku powodzenia metoda konwertuje ową listę na tablicę łańcuchów. Dzięki temu zwracaną przez metodę będzie można wprost przypisać do własności Lines komponentu TextBox, która jest tablicą łańcuchów. Jeżeli jednak nie interesowałby Cię podział na akapity wczytywango tekstu, można go jednym poleceniem odczytać w całości, korzystając z metody ReadToEnd klasy StreamReader. Przygotowując tekst informacji wyświetlanej za pomocą metody MessageBox.Show można korzystać ze znaków nowej linii (Chr(13)) lub znaku tabulacji (Chr(9)). Okno komunikatu może zawierać również tytuł oraz ikonę informującą o charakterze komunikatu. Aby tak było podaj dodatkowe argumety: MessageBox.Show("Błąd odczytu pliku " & nazwapliku & vbnewline & "Opis wyjątku: " & e.message, "Notatnik - Błąd przy wczytywaniu pliku", MessageBoxButtons.OK, MessageBoxIcon.Error) 5/12

11. Wybór pliku za pomocą okna dialogowego Wróć do widoku projektowania. W podoknie Toolbox, w grupie Dialogs zaznacz komponent OpenFileDialogs i umieść go na podglądzie formy. Nowy obiekt OpenFileDialog1 nie pojawi się jednak na samej formie, ale pod nią, na liście komponentów razem z MenuStrip1 i StatusStrip1. Dwukrotnie kliknij pozycję menu Otwórz w podglądzie menu, tworząc w ten sposób metodę zdarzeniową uruchamianą w przypadku wybrania tej pozycji menu w działającej aplikacji. Wpisz kod: Private Sub OtwórzToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OtwórzToolStripMenuItem.Click If OpenFileDialog1.ShowDialog() = DialogResult.OK Then Dim nazwapliku As String = OpenFileDialog1.FileName TextBox1.Lines = CzytajPlikTekstowy(nazwaPliku) Dim ostatnislash As Integer = nazwapliku.lastindexof("\") ToolStripStatusLabel1.Text = nazwapliku.substring(ostatnislash + 1, nazwapliku.length - ostatnislash - 1) Ustaw także kilka opcji okna dialogowego. Aby to zrobić, wróć do widoku projektowania, zaznacz komponent OpenFileDialog1 i korzystając z okna własności: - zmień tytuł okna, edytując własność Title na Wczytaj plik; - własność DefaultExt zmień na txt; - wyczyść zawartość pola przy własności FileName; - edytuj pole przy własności InitialDirectory, podając katalog domyślny równy katalogowi bieżącemu (wpisz kropkę); - wpisz łańcuch określający filtry (własność Filter): Pliki tekstowe (*.txt) *.txt Pliki INI (*.ini) *.ini Pliki źródłowe VB (*.vb) *.vb Wszystkie pliki (*.*) *.* Po wprowadzeniu powyższych zmian i kompilacji projektu sprawdź, czy uda się wczytać jakiś plik tekstowy. 12. Zapisywanie tekstu do pliku W obrębie klasy Form1 zdefiniuj metodę z listingu: Public Shared Sub ZapiszDoPlikuTekstowego(nazwaPliku As String, tekst As String()) Using sw As StreamWriter = New StreamWriter(nazwaPliku) For Each wiersz As String In tekst sw.writeline(wiersz) sw.close() End Using W widoku projektowania umieść na formie komponent SaveFileDialog z zakładki Dialogs podokna Toolbox. Zaznacz go i w oknie własności na zakładce Properties: - zmień własność Title na Zapisz do pliku; - zmień DefaultExt na txt; - odnajdź jego własność Filter i w związanym z nią polu wpisz łańcuch definiujący filtr Pliki tekstowe (*.txt) *.txt Pliki INI (*.ini) *.ini Pliki źródłowe VB (*.vb) *.vb Wszystkie pliki (*.*) *.*; - zmień InitialDirectory na kropkę. 6/12

Utwórz metodę zdarzeniową do pozycji Zapisz jako w menu Plik i umieść w niej kod: Opracował: Damian Krzesimowski Private Sub ZapiszJakoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZapiszJakoToolStripMenuItem.Click Dim nazwapliku As String = OpenFileDialog1.FileName If nazwapliku.length > 0 Then SaveFileDialog1.FileName = nazwapliku If SaveFileDialog1.ShowDialog() = DialogResult.OK Then nazwapliku = SaveFileDialog1.FileName ZapiszDoPlikuTekstowego(nazwaPliku, TextBox1.Lines) Dim ostatnislash As Integer = nazwapliku.lastindexof("\") ToolStripStatusLabel1.Text = nazwapliku.substring(ostatnislash + 1, nazwapliku.length - ostatnislash - 1) zmianatekstu = False Teraz możesz uzupełnić metodę Form1_FormClosing wywołaniem powyższej metody z argumentami równymi null: Case DialogResult.Yes ZapiszJakoToolStripMenuItem_Click(Nothing, Nothing) 13. Okna dialogowe wyboru czcionki i koloru Na podglądzie formy umieść okno dialogowe FontDialog z zakładki Dialogs. Następnie dla pozycji Czcionka w menu Widok utwórz metodę zdarzeniową z poleceniami z listingu: Private Sub CzcionkaToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CzcionkaToolStripMenuItem.Click FontDialog1.Font = TextBox1.Font If FontDialog1.ShowDialog() = DialogResult.OK Then TextBox1.Font = FontDialog1.Font W zupełnie analogiczny sposób możesz przygotować metodę pozwalającą na wybór koloru tła, korzystającą z komponentu ColorDialog: Private Sub TłoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TłoToolStripMenuItem.Click ColorDialog1.Color = TextBox1.BackColor If ColorDialog1.ShowDialog() = DialogResult.OK Then TextBox1.BackColor = ColorDialog1.Color 14. Edycja i korzystanie ze schowka Kolejna grupa poleceń związana jest z menu Edycja. Ich obsługa okazuje się łatwa, ponieważ komponent TextBox posiada odpowiednie metody, które zadanie sprowadzi do ich właściwego wywołania. Uzupełnij ciało klasy Form1 o podane listingi: Private Sub CofnijToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CofnijToolStripMenuItem.Click TextBox1.Undo() Private Sub WytnijToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WytnijToolStripMenuItem.Click TextBox1.Cut() 7/12

Private Sub KopiujToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KopiujToolStripMenuItem.Click TextBox1.Copy() Private Sub WklejToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WklejToolStripMenuItem.Click TextBox1.Paste() Private Sub UsuńToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UsuńToolStripMenuItem.Click TextBox1.SelectedText = "" Private Sub ZaznaczWszystkoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZaznaczWszystkoToolStripMenuItem.Click TextBox1.SelectAll() 15. Polecenia Ustawienia wydruku i Drukuj w menu Plik Przejdź do widoku projektowania. Zaznacz komponent menu głównego menustrip1. W edytorze menu widocznym na podglądzie formy zaznacz pozycję Zamknij w podmenu Plik i z menu kontekstowego wybierz Insert, a następnie Menu Item. Kliknij dodany element i zmień jego etykietę na &Ustawienia wydruku. Powtórz czynności, aby dodać polecenia Podgląd wydruku oraz &Druku. Ustaw klawisz skrótu tego ostatniego na Ctrl+P. Za poleceniem Drukuj wstaw separator. Tak dodane komponenty mają nazwy toolstripmenuitemn, gdzie n to kolejna liczba naturalna. Jeżeli chcesz nadać im bardziej przyjazne nazwy, zaznacz je w widoku projektowania, przejdź do okna własności i zmień ich nazwy, korzystając z własności Name. 8/12

16. Metoda zarządzająca drukowaniem tekstu Na podglądzie formy umieść komponent PrintDocument z zakładki Printing. Zdefiniuj prywatne pole: Dim sr As StringReader = Nothing W widoku projektowania interfejsu zaznacz obiekt PrintDocument1, w oknie własności przejdź na zakładkę zdarzeń i utwórz metodę związaną ze zdarzeniem PrintPage. Umieść w niej pętlę przenoszącą zawartość pola tekstowego linia po linii na powierzchnię drukowanej strony: Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim czcionka As Font = TextBox1.Font Dim wysokoscwiersza As Integer = CInt(czcionka.GetHeight(e.Graphics)) Dim ilosclinii As Integer = e.marginbounds.height \ wysokoscwiersza If IsNothing(sr) Then sr = New StringReader(TextBox1.Text) e.hasmorepages = True For i As Integer = 1 To ilosclinii Dim wiersz As String = sr.readline() If IsNothing(wiersz) Then e.hasmorepages = False sr = Nothing Exit For e.graphics.drawstring( wiersz, czcionka, Brushes.Black, e.marginbounds.left, e.marginbounds.top + i * wysokoscwiersza) Teraz pozostaje uruchomić proces drukowania. W tym celu: - na podglądzie formy umieść komponent PrintDialog z zakładki Printing; - za pomocą okna Properties powiąż jego własność Document z obiektem PrintDocument1; - utwórz metodę zdarzeniową do pozycji Drukuj w menu Plik i umieść w niej polecenia: Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click If PrintDialog1.ShowDialog() = DialogResult.OK Then PrintDocument1.DocumentName = "Notatnik - " & ToolStripStatusLabel1.Text PrintDocument1.Print() 17. Okno dialogowe ustawień wydruku Dodaj do formy kontrolkę PageSetupDialog, pozwalającą na ustalenie przez użytkownika aplikacji sposobu, w jaki będą drukowane strony. Jej własność Document powiąż z kontrolką PrintDocument1. Utwórz metodę zdarzeniową do pozycji Ustawienia wydruku z menu Plik i umieść w niej wywołanie metody ShowDialog komponentu PageSetupDialog1: Private Sub ToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click PageSetupDialog1.ShowDialog() 9/12

Opracował: Damian Krzesimowski Nowe okno dialogowe umożliwia zmianę ustawień drukowania związanych z komponentem PrintDocument1. Okno, które zobaczysz, może zależeć od wersji systemu operacyjnego oraz wybranej drukarki. 18. Podgląd wydruku Na formie umieść komponent PrintPreviewDialog. Jego własność Document powiąż z PrintDocument1. Utwórz metodę zdarzeniową do pozycji Podgląd wydruku z menu Plik i umieść w niej wywołanie metody ShowDialog komponentu PrintDocument1: Private Sub ToolStripMenuItem4_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem4.Click PrintPreviewDialog1.ShowDialog() 19. Rozwiązanie problemu długich linii Na podglądzie można zobaczyć, że długie linie w drukowanym tekście są po prostu ucinane. To oczywiście nie jest pożądane. Najbardziej dogodnym momentem na podział linii wydaje się chwila, w której tworzony jest strumień reprezentujący zawartość pola tekstowego, tj. linia If IsNothing(sr) Then sr = New Stringreader(TextBox1.text). Argumentem użytego w tej linii konstruktowa klasy Stringreader, a więc łańcuch odczytany z własności TextBox1.Text, musisz zastąpić łańcuchem, w którym długie linie będą już podzielone. Zmodyfikuj wobec tego metodę PrintDocument1_PrintPage zgodnie z listingiem: Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim czcionka As Font = TextBox1.Font Dim wysokoscwiersza As Integer = CInt(czcionka.GetHeight(e.Graphics)) Dim ilosclinii As Integer = e.marginbounds.height \ wysokoscwiersza If IsNothing(sr) Then Dim tekst As String = "" For Each wiersz As String In TextBox1.Lines Dim szerokosc As Single = e.graphics.measurestring(wiersz, czcionka).width If szerokosc < e.marginbounds.width Then tekst &= wiersz & vbnewline Else Dim sredniaszerokosclitery As Single = szerokosc \ wiersz.length Dim ileliterwwierszu As Integer = CInt(e.MarginBounds.Width \ sredniaszerokosclitery) Dim ilerazy As Integer = wiersz.length \ ileliterwwierszu For i = 1 To ilerazy tekst &= wiersz.substring((i - 1) * ileliterwwierszu, ileliterwwierszu) & vbnewline tekst &= wiersz.substring(ilerazy * ileliterwwierszu) & vbnewline sr = New StringReader(tekst) e.hasmorepages = True For i As Integer = 1 To ilosclinii Dim wiersz As String = sr.readline() If IsNothing(wiersz) Then e.hasmorepages = False sr = Nothing 10/12

Exit For e.graphics.drawstring( wiersz, czcionka, Brushes.Black, e.marginbounds.left, e.marginbounds.top + i * wysokoscwiersza) 20. Podział linii uwzględniający wyrazy Rozwiązanie problemu podziału długich linii nadal nie jest ostateczne, ze względu na jego oczywistą wadę ignoruje podział linii na wyrazy. W podziale linii na wydruku przygotowanym w poprzednim punkcie uwzględniona zostanie integralność wyrazów. W tym celu jeszcze raz zmodyfikuj metodę PrintDocument1_PrintPage: Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim czcionka As Font = TextBox1.Font Dim wysokoscwiersza As Integer = CInt(czcionka.GetHeight(e.Graphics)) Dim ilosclinii As Integer = e.marginbounds.height \ wysokoscwiersza If IsNothing(sr) Then Dim tekst As String = "" For Each wiersz As String In TextBox1.Lines Dim szerokosc As Single = e.graphics.measurestring(wiersz, czcionka).width If szerokosc < e.marginbounds.width Then tekst &= wiersz & vbnewline Else Dim sredniaszerokosclitery As Single = szerokosc \ wiersz.length Dim ileliterwwierszu As Integer = CInt(e.MarginBounds.Width \ sredniaszerokosclitery) Dim skracanywiersz As String = wiersz Do Dim ostatniaspacja As Integer = skracanywiersz.substring(0, Math.Min(ileLiterWWierszu, skracanywiersz.length)).lastindexof(" ") Dim iloscliter As Integer = If(ostatniaSpacja <> -1, Math.Min(ostatniaSpacja, ileliterwwierszu), ileliterwwierszu) tekst &= skracanywiersz.substring(0, iloscliter) & vbnewline skracanywiersz = skracanywiersz.substring(iloscliter).trimstart(" "c) Loop While skracanywiersz.length > ileliterwwierszu tekst &= skracanywiersz & vbnewline sr = New StringReader(tekst) e.hasmorepages = True For i As Integer = 1 To ilosclinii Dim wiersz As String = sr.readline() If IsNothing(wiersz) Then e.hasmorepages = False sr = Nothing Exit For e.graphics.drawstring( wiersz, czcionka, Brushes.Black, e.marginbounds.left, e.marginbounds.top + i * wysokoscwiersza) 11/12

21. Drukowanie w tle Na podglądzie formy umieść komponent BackgroundWorker z palety Components. Klikając dwukrotnie ikonę nowego komponentu na pasku pod podglądem formy w widoku projektowania, utwórz jego domyślną metodę zdarzeniową. Następnie umieść w niej polecenie drukowania: Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork PrintDocument1.Print() Następnie w metodzie zdarzeniowej związanej z poleceniem Drukuj z menu Plik zastąp polecenie drukowania uruchomieniem komponentu: Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click If PrintDialog1.ShowDialog() = DialogResult.OK Then PrintDocument1.DocumentName = "Notatnik - " & ToolStripStatusLabel1.Text BackgroundWorker1.RunWorkerAsync() 12/12