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

Podobne dokumenty
Aplikacja notatnik. Opracował: Damian Krzesimowski

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

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

Metodyka programowania. Edytor tekstu. Specyfikacja

Notatnik w Windows Forms

Kadry Optivum, Płace Optivum

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

Kolory elementów. Kolory elementów

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

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

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

Temat: Organizacja skoroszytów i arkuszy

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

Dodanie nowej formy do projektu polega na:

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

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

Prosta książka telefoniczna z wykorzystaniem zapisu do pliku

Kadry VULCAN, Płace VULCAN

Instrukcja obsługi funkcji specjalnych szablonu C01 v.1.0

Płace VULCAN. 2. W polu nad drzewem danych ustaw rok, za który chcesz utworzyć deklaracje.

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

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Zadanie 1. Stosowanie stylów

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

Przewodnik Szybki start

Programowanie Obiektowe GUI

Obszar Logistyka/Zamówienia Publiczne

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

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

UONET+ moduł Dziennik

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

Ćwiczenia 9 - Swing - część 1

Na komputerach z systemem Windows XP zdarzenia są rejestrowane w trzech następujących dziennikach: Dziennik aplikacji

Programowanie w środowisku graficznym GUI

Ćwiczenie 5 Menu programu

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

UONET+ moduł Dziennik

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

Jak utworzyć raport kasowy?

Rozwiązanie ćwiczenia 8a

Dodawanie stron do zakładek

Access - Aplikacja. Tworzenie bazy danych w postaci aplikacji

Informatyka II. Laboratorium Aplikacja okienkowa

Kurs programowania 2 - listy

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

Programowanie obiektowe

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

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

Włączanie/wyłączanie paska menu

Podstawowe czynnos ci w programie Word

Dodawanie stron do zakładek

Laboratorium 8 ( Android -pierwsza aplikacja)

Sekretariat Optivum. Jak przygotować listę uczniów zawierającą tylko wybrane dane, np. adresy ucznia i jego opiekunów? Projektowanie listy

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie II. Tworzenie nowej karty pracy a. Obiekty b. Nauka pisania...

DIAGNOSTYKA DIAGNOSTYKA

Ćwiczenia nr 2. Edycja tekstu (Microsoft Word)

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

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.

Kalkulator. Programowanie komputerów. Kalkulator możliwe udoskonalenia. Kalkulator. Kalkulator. Kalkulator możliwe udoskonalenia

Podręcznik użytkownika programu. Ceremonia 3.1

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

5.2. Pierwsze kroki z bazami danych

Instrukcja laboratoryjna cz.3

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

Zadanie 9. Projektowanie stron dokumentu

UMOWY INSTRUKCJA STANOWISKOWA

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

Instrukcja uŝytkowania programu

Jak rozpocząć pracę? Mapa

Zadanie 8. Dołączanie obiektów

Korzystanie z edytora zasad grupy do zarządzania zasadami komputera lokalnego w systemie Windows XP

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

Rozwiązanie ćwiczenia 6a

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

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

Laboratorium - Narzędzia linii uruchamiania w systemie Windows 7

Informatyka Arkusz kalkulacyjny Excel 2010 dla WINDOWS cz. 1

Zgrywus dla Windows v 1.12

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

Maskowanie i selekcja

MS Excell 2007 Kurs podstawowy Filtrowanie raportu tabeli przestawnej

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

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

Zaawansowane aplikacje internetowe - laboratorium

Tworzenie prezentacji w MS PowerPoint

REJESTRACJA PROJEKTÓW

Finanse VULCAN. Jak wprowadzić fakturę sprzedaży?

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

Czytnik kart SIM instrukcja obsługi

UONET+ moduł Dziennik

Dodawanie i modyfikacja atrybutów zbioru

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

bla bla Guard podręcznik użytkownika

W kolejnym odcinku zajmiemy się umieszczaniem w naszym projekcie zestawu ikon służących szybkiemu korzystaniu z opcji programu.

UONET+ - moduł Sekretariat

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

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

Transkrypt:

Notatnik - wymagania 1. Zmiana nazwy okna 2. Zmiana ikony okna (jeśli nie wiemy, którą właściwość obiektu należy zmienić, to zróbmy to poprzez graficzny interfejs) 3. Pasek stanu (StatusStrip) 4. Menu główne 5. Potwierdzenie zamknięcia aplikacji 6. Ukrywanie i pokazywanie paska stanu (poprzez polecenie w menu) 7. Odczytywanie tekstu z pliku. 8. Wybór pliku za pomocą okna dialogowego 9. Zapisywanie tekstu do pliku 10. Okno dialogowe wyboru czcionki i koloru 11. Edycja i korzystanie ze schowka 12. Drukowanie Ad.3 Dodajmy do okna komponent StatusStrip z grupy Menus & Toolbars. Własność Dock, określa położenie i przyklejenie do dolnej krawędzi forma. Obiekt StatusStrip powinien być dodany do kolekcji Items okna. Dodatkowo możemy dodać pole tekstowe (Status Label), z poziomu okna Items Collection Editors z rozwijanego menu z lewej strony. Ad.4 Menu Plik, a w nim 4 pozycje: Otwórz, Zapisz jako, separator (pojedyncze znak myślnika) i Zamknij. Menu Edycja z pozycjami: Cofnij, Wytnij, Kopiuj, Wklej, Usuń oraz Zaznacz wszystko. Menu Widok z pozycjami: Czcionka, Tło i Pasek stanu. Mile widziane będą skróty klawiszowe. Przykłady: - Otwórz: Ctrl + O - Zapisz jako: Ctrl + S. Kliknięcie w menu Otwórz spowoduje otwarcie okna dialogowego odpowiedzialnego za wskazanie pliku do wczytania, a Zapisz - okna dialogowego pozwalającego na wybranie nazwy pliku do zapisu zawartości notatnika. Ad.5 Przed zamknięciem edytora warto zapytać użytkownika o potwierdzenie operacji, w celu zabezpieczenia utraty niezapisanych zmian w dokumencie. Pozwala na to zdarzenie FormClosing, które wywoływane jest w przypadku próby zamknięcia forma, ale jeszcze przed zdarzeniem FormClose, i które w odróżnieniu od tego drugiego pozwala na anulowanie procesu zamykania forma. Zatem przed zakończeniem działania aplikacji wyświetlamy komunikat z pytaniem, czy zapisać tekst, lub anulować zamknięcie.

private void Form1_FormClosing(object sender, FormClosingEventArgs e) DialogResult dr = MessageBox.Show("Czy zapisać zmiany w edytowanym dokumencie?", this.text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3); switch (dr) case DialogResult.Yes: MessageBox.Show("Wstawić wywołanie metody zapisującej zawartość notatnika do pliku"); break; case DialogResult.No: break; case DialogResult.Cancel: e.cancel = true; break; default: e.cancel = true; break; // do metody Load formularza należy dopisać private void Form1_Load(object sender, EventArgs e) this.formclosing += new FormClosingEventHandler(MainForm_FormClosing); Odpowiedź twierdząca oznacza zamknięcie aplikacji z uprzednim zapisaniem dokumentu na dysku. Odpowiedź przecząca (przycisk Nie) spowoduje zamknięcie aplikacji bez zapisywania dokumentu, natomiast kliknięcie przycisku Anuluj, zapobiegnie zamknięciu aplikacji. Ad.6 Właściwość Checked pozycji Pasek stanu z menu Widok. Jako ciekawostka, możemy dodać powyższe zachowanie poprzez podgląd graficzny forma. (klawisz F7, jeśli aktualnie jesteśmy w edytorze kodu). Krótka instrukcja: 1. W podglądzie forma zaznacz pozycję Pasek stanu z menu Widok. W oknie właściwości znajdź jej właśność CheckOnClick i ustaw ją na true. 2. Kliknij dwukrotnie tę pozycję w edytorze menu. Powstanie w ten sposób metoda zdarzeniowa, w której należy umieścić kod: private void pasekstanutoolstripmenuitem_click(object sender, EventArgs e) statusstrip1.visible = pasekstanutoolstripmenuitem.checked;

3. Wróć do podglądu forma i ponownie zaznacz opcję Pasek stanu w menu Widok. 4. Za pomocą okna właściwości ustal wartość początkową własności Checked na True (lub równoważnie zmień wartość własności CheckState na Checked). Ad.7 Komponent TextBox nie posiada żadnych metod pozwalających na łatwe czytanie lub zapisywanie zawartości plików tekstowych. Potrzebujemy metody wczytującej plik tekstowy do tablicy łańcuchów. Kroki: - musimy dodać deklarację: using System.IO; - wkleić poniższy kod metody: public static string[] CzytajPlikTekstowy(string nazwapliku) List<string> tekst=new List<string>(); try using (StreamReader sr = new StreamReader(nazwaPliku)) string wiersz; while ((wiersz = sr.readline())!= null) tekst.add(wiersz); return tekst.toarray(); catch (Exception e) MessageBox.Show("Błąd odczytu pliku " + nazwapliku + " (" + e.message + ")"); return null; Do gromadzenia i przechowywania tekstu wewnątrz metody korzystamy z ogólnego List sparametryzowanego typem String. Każdy łańcuch przechowuje osobny wiersz (akapit) odczytanego z pliku tekstu. W przypadku powodzenia (bez wyjątków) metoda konwertuje ową listę na tablicę łańcuchów. Dzięki temu wartość zwracaną przez metodę będzie można wprost przypisać do własności Lines komponentu TextBox, która jest tablicą. Jeżeli nie interesowałby nas podział na akapity (wiersze) wczytywanego pliku, to moglibyśmy go jednym poleceniem odczytać w całości, korzystają z metody ReadToEnd klasy StreamReader. Warto zwrócenia uwagi jest użycie słowa kluczowego using. Konstrukcja, w której po słowie using w nawiasach znajduje się polecenie tworzące instancję klasy, zapewnia że utworzony obiekt zostanie usunięty z pamięci po opuszczeniu zakresu wyznaczonego przez nawiasy klamrowe (operator zakresu), pomimo, że jest typu referencyjnego.

Okno komunikatu błędu może zawierać tytuł oraz ikonę informującą o charakterze komunikatu (o tym, czy jest błąd, ostrzeżenie, informacja). Należy dodać dodatkowe parametry do wywołania metody: MessageBox.Show("Błąd odczytu pliku " + nazwapliku + "\nopis wyjątku: " + e.message, "Notatnik.NET - Błąd przy wczytywaniu pliku", MessageBoxButtons.OK, MessageBoxIcon.Error); Ad.8 Przygotujemy teraz metodę pozwalającą na wybór pliku za pomocą standardowego okna dialogowego, a następnie przy użyciu przygotowanej w poprzednim punkcie metody pomocniczej wczytującą zawartość wybranego pliku do pola tekstowego. 1. Wróć do widoku projektowania, przełączając zakładkę edytora na Form1.cs, lub naciskając klawisz F7. 2. W podoknie Toolbox w grupie Dialogs, zaznacz komponent OpenFileDialogs i umieść go na podglądzie forma. Nowy obiekt openfiledialog1 nie pojawi się jednak na samym formie, ale pod nim, na liście komponentów razem z menustrip1 i statusstrip1. 3. Dwukrotnie kliknij w pozycję 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. 4. Do nowej metody wpisz poniższy kod: private void otwórztoolstripmenuitem_click(object sender, EventArgs e) Thread threadgetfile = new Thread(new ThreadStart(getFile)); threadgetfile.apartmentstate = ApartmentState.STA; threadgetfile.start(); public void getfile() if (openfiledialog1.showdialog() == DialogResult.OK) string nazwapliku = openfiledialog1.filename; Invoke((MethodInvoker)delegate poleteksotwe.lines = CzytajPlikTekstowy(nazwaPliku); );

//int ostatnislash = nazwapliku.lastindexof('\\'); //toolstripstatuslabel1.text = nazwapliku.substring(ostatnislash + 1, nazwapliku.length - ostatnislash - 1); 5. Ustaw także kilka opcji w oknie dialogowym. Aby to zrobić, wróć do widoku projektowania, zaznacz komponent okna dialogowego i korzystając z okna właściwości: a. zmień tytuł okna, ustawiając własność Title na np. Wczytaj plik b. własność DefaultExt zmień na txt (jako rozszerzenie dopisywane do nazwy pliku, jeżeli użytkownik żadnego rozszerzenia nie doda sam). c. wyczyść zawartość pola przy własności FileName d. edytuj pole przy własności InitialDirectory, podając katalog domyślny równy katalogowi bieżącemu, tj. po prostu kropkę. e. wpisz łańcuch określający filtry (własność Filter), np. Pliki tekstowe (*.txt) *.txt Pliki INI (*.ini) *.ini Pliki źródłowe (*.cs) *.cs Wszystkie pliki (*.*) *.*. Fragment łańcucha definiujący jeden filtr składa się z dwóch segmentów oddzielonych znakiem. W pierwszym określamy opis wyświetlany w oknie dialogowym, a w drugim - maskę filtru. Trochę zamieszania powoduje to, że kolejne filtry również oddzielane są znakiem, przez co cały łańcuch traci na czytelności. Tym bardziej dotkliwy staje się brak wygodnego edytora tej właśności. Ad.9 Przygotujemy teraz metodę ZapiszDoPlikuTekstowego zapisującą wskazaną w argumencie tablicę łańcuchów do pliku tekstowego. Następnie w metodzie zdarzeniowej związanej z pozycją Zapisz jako z menu Plik, wykorzystamy tę metodę do zapisania do pliku zawartości komponentu TextBox. 1. W obrębie klasy Form1 zdefiniuj metodę: public static void ZapiszDoPlikuTekstowego(string nazwapliku,string[] tekst) using (StreamWriter sw = new StreamWriter(nazwaPliku)) foreach (string wiersz in tekst) sw.writeline(wiersz); 2. W widoku projektowania umieść na formie komponent SaveFileDialog z zakładki Dialogs podokna Toolbox. 3. Zaznacz go i w oknie właściwości na zakładce Properties: a. zmień własność Title na Zapisz do pliku. b. DefaultExt ustaw na txt

c. 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 (*.cs) *.cs Wszystkie pliki (*.*) *.* ; d. zmień InitialDirectory na kropkę. 4. Utwórz metodę zdarzeniową dla Zapisz jako z menu Plik i umieść w niej poniższy kod: private void zapiszjakotoolstripmenuitem_click(object sender, EventArgs e) string nazwapliku = openfiledialog1.filename; if (nazwapliku.length > 0) savefiledialog1.filename = nazwapliku; if (savefiledialog1.showdialog() == DialogResult.OK) nazwapliku = savefiledialog1.filename; ZapiszDoPlikuTekstowego(nazwaPliku, textbox1.lines); int ostatnislash = nazwapliku.lastindexof('\\'); toolstripstatuslabel1.text = nazwapliku.substring(ostatnislash + 1, nazwapliku.length - ostatnislash - 1); 5. Uzupełnij metodę Form1_FormClosing wywołaniem powyższej metody z argumentami równymi null (należy je wstawić zamiast tymczasowego komunikatu wyróżnionego w listingu: case DialogResult.Yes: zapiszjakotoolstripmenuitem_click(null, null); break; Ad.10 Opracujemy teraz metody związane z pozycjami menu Widok, które będą pozwalać na wybór koloru tła notatnika i użytej w nim czcionki. Ponownie użyjemy standardowych okien dialogowych. W przypadku czcionki umożliwimy także zmianę jej koloru. 1. W podglądzie forma umieść okno dialogowe ColorDialog z zakładki Dialogs. 2. Dla pozycji Tło w menu Widok utwórz metodę zdarzeniową z poleceniami: private void tłotoolstripmenuitem_click(object sender, EventArgs e) colordialog1.color = textbox1.backcolor; if (colordialog1.showdialog() == DialogResult.OK) textbox1.backcolor = colordialog1.color; 3. W podobny sposób możesz przygotować metodę pozwalającą na wybór czcionki i jej koloru, korzystającą z komponentu FontDialog. 4. Po umieszczeniu tego komponentu na podglądzie okna ustaw jego własność ShowColor na True

5. Następnie w metodzie zdarzeniowej związanej ze zdarzeniami Click pozycji Czcionka z menu Widok umieść polecenia: private void czcionkatoolstripmenuitem_click(object sender, EventArgs e) fontdialog1.font = textbox1.font; fontdialog1.color = textbox1.forecolor; if (fontdialog1.showdialog() == DialogResult.OK) textbox1.font = fontdialog1.font; textbox1.forecolor = fontdialog1.color; W obu metodach polecenia sprzed instrukcji if uzgadniają początkową wartość prezentowaną w oknie dialogowym z bieżącą wartością odpowiednich własności komponentu textbox1. Dzięki temu okno dialogowe pozwala na modyfikowanie bieżącej wartości, zamiast wymuszać za każdym razem określanie jej od nowa. Ad.11 Kolejna grupa poleceń związana jest z menu Edycja. Ich obsługa okazuje się łatwa, ponieważ komponent TextBox posiada odpowiednie metody, co nasze zadanie sprowadza do ich właściwego użycia. Tworzymy wobec tego metody zdarzeniowe do wszystkich pozycji z menu Edycja i odpowiednio wywołujemy w nich metody widoczne poniżej: private void cofnijtoolstripmenuitem_click(object sender, EventArgs e) textbox1.undo(); private void wytnijtoolstripmenuitem_click(object sender, EventArgs e) textbox1.cut(); private void kopiujtoolstripmenuitem_click(object sender, EventArgs e) textbox1.copy(); private void wklejtoolstripmenuitem_click(object sender, EventArgs e) textbox1.paste(); private void usuńtoolstripmenuitem_click(object sender, EventArgs e) textbox1.selectedtext = "";

private void zaznaczwszystkotoolstripmenuitem_click(object sender, EventArgs e) textbox1.selectall(); Zwróćmy uwagę na to, że zawartość utworzonego podmenu Edycja pokrywa się przynajmniej częściowo z zawartością menu kontekstowego domyślnie przypisanego do pola tekstowego. Wywoływane z obu menu metody obiektu textbox1 też są tożsame. Ad.12 Podobnie jak w przypadku operacji na plikach, tak i tu nie możemy liczyć na wygodną w użyciu metodę, która czarną robotę wykonałaby za nas. To oznacza, że i tym razem odpowiedni kod musimy napisać samodzielnie. Za to po przygotowaniu metody organizującej widok stron, niemal za darmo uzyskujemy podgląd wydruku. Do drukowania w trybie graficznym należy użyć klas Graphics - jej instancja będzie reprezentowała powierzchnię drukowanej kartki. Zrobimy użytek z metodhy DrawString, która pozwala na umieszczenie tekstu w dowolnym miejscu reprezentowanej przez klasę powierzchni (kartki). W przypadku drukowania inne metody (DrawText i TextRender) - niestety - do tego się nie nadają. Powinniśmy dodać do aplikacji komponent PrintDocument reprezentujący drukowany dokument i wykorzystujący jego zdarzenia PrintPage do wydrukowania zawartości pola tekstowego. Do inicjacji wydruku wykorzystamy okno dialogowe udostępniane przez kontrolkę PrintDialog. 1. Na podglądzie forma należy umieścić PrintDocument z zakładki Printing 2. Zdefiniujmy prywatne pole: private StringReader sr = null; 3. 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 void printdocument1_printpage(object sender, System.Drawing.Printing.PrintPageEventArgs e) Font czcionka = textbox1.font; int wysokoscwiersza=(int)czcionka.getheight(e.graphics); int ilosclinii=e.marginbounds.height/wysokoscwiersza; if (sr == null) sr = new StringReader(textBox1.Text); // czy pierwsza strona? e.hasmorepages = true; for(int i=0;i<ilosclinii;i++) string wiersz = sr.readline();

if (wiersz == null) e.hasmorepages = false; sr = null; break; e.graphics.drawstring(wiersz, czcionka, Brushes.Black, e.marginbounds.left, e.marginbounds.top+i*wysokoscwiersza); Dopuszczamy tutaj uproszczenie, mianowicie zakładamy, że żadna linia tekstu nie jest dłuższa niż szerokość kartki. To założenie jest zwykle nieprawdziwe. 4. Uruchamiamy proces drukowania a. Na podglądzie forma umieść komponent PrintDialog z zakładki Printing b. za pomocą okna Properties powiąż jego własność Document z obiektem printdocument1 c. utwórz metodę zdarzeniową dla pozycji Drukuj w menu Plik i umieść w niej polecenie: private void drukujtoolstripmenuitem_click(object sender, EventArgs e) if (printdialog1.showdialog() == DialogResult.OK) printdocument1.documentname = "Notatnik.NET - " + toolstripstatuslabel1.text; printdocument1.print(); Okno dialogowe do ustawień wydruku Do forma należy dodać PageSetupDialog pozwalający na ustalenie przez użytkownika aplikacji sposobu, w jaki będą drukowane strony. 1. Umieść komponent PageSetupDialog 2. Własność obiektu pagesetupdialog1 powiąż z printdocument1. 3. Utwórz metodę zdarzeniową do pozycji Ustawienia strony z menu Plik i umieść w niej poniższe wywołanie: private void ustawieniastronytoolstripmenuitem_click(object sender, EventArgs e) pagesetupdialog1.showdialog();

Podgląd wydruku: Do tego służy okno dialogowe PrintPreviewDialog. Sam obszar podglądu, jeżeli chcemy go wkomponować w główne okno aplikacji jest również dostępny dzięki PrintPreviewControl. My jednak, chcąc zaoszczędzić sobie kłopotu, skorzystamy z wariantu podglądu w osobnym oknie. 1. Na form umieścić komponent PrintPreviewDialog 2. Jego własność Document ustaw na printdocument1 3. Metoda zdarzeniowa do pozycji Podgląd wydruku z menu Plik i umieść w niej wywołanie: private void toolstripmenuitem3_click(object sender, EventArgs e) printpreviewdialog1.showdialog();