Drukowanie przy użyciu podglądu wydruku (Windows Forms .NET)
W programowaniu Windows Forms często jest oferowana wersja zapoznawcza wydruku oprócz usług drukowania. Łatwym sposobem dodawania usług podglądu wydruku do aplikacji jest użycie PrintPreviewDialog kontrolki w połączeniu PrintPage z logiką obsługi zdarzeń do drukowania pliku.
Aby wyświetlić podgląd dokumentu tekstowego za pomocą kontrolki PrintPreviewDialog
W programie Visual Studio użyj okienka Eksplorator rozwiązań i kliknij dwukrotnie formularz, z którego chcesz wydrukować. Spowoduje to otwarcie Projektant wizualizacji.
W okienku Przybornik kliknij PrintDocument dwukrotnie składnik i PrintPreviewDialog składnik, aby dodać je do formularza.
Dodaj element
Button
do formularza lub użyj przycisku znajdującego się już w formularzu.W Projektant wizualizacji formularza wybierz przycisk . W okienku Właściwości wybierz przycisk Filtr zdarzeń , a następnie kliknij
Click
dwukrotnie zdarzenie, aby wygenerować procedurę obsługi zdarzeń.Kod
Click
zdarzenia powinien być widoczny. Poza zakresem programu obsługi zdarzeń dodaj dwie prywatne zmienne ciągu do klasy o nazwiedocumentContents
istringToPrint
:// Declare a string to hold the entire document contents. private string documentContents=""; // Declare a variable to hold the portion of the document that // is not printed. private string stringToPrint="";
' Declare a string to hold the entire document contents. Private documentContents As String ' Declare a variable to hold the portion of the document that ' is not printed. Private stringToPrint As String
Po powrocie
Click
do kodu procedury obsługi zdarzeń ustaw DocumentName właściwość na dokument, który chcesz wydrukować, i otwórz i odczytaj zawartość dokumentu do dodanego wcześniej ciągu.string docName = "testPage.txt"; string docPath = @"C:\"; string fullPath = System.IO.Path.Combine(docPath, docName); printDocument1.DocumentName = docName; stringToPrint = System.IO.File.ReadAllText(fullPath);
Dim docName As String = "testPage.txt" Dim docPath As String = "C:\Users\v-rsatao\Desktop\" Dim fullPath As String = System.IO.Path.Combine(docPath, docName) PrintDocument1.DocumentName = docName stringToPrint = System.IO.File.ReadAllText(fullPath)
Tak jak w przypadku drukowania dokumentu, w PrintPage procedurze obsługi zdarzeń użyj Graphics właściwości PrintPageEventArgs klasy i zawartości pliku, aby obliczyć wiersze na stronę i renderować zawartość dokumentu. Po narysaniu każdej strony sprawdź, czy jest to ostatnia strona, i ustaw HasMorePages odpowiednio właściwość
PrintPageEventArgs
. ZdarzeniePrintPage
jest zgłaszane do momentu, ażHasMorePages
ma wartośćfalse
. Po zakończeniu renderowania dokumentu zresetuj ciąg do renderowania. Upewnij się również, żePrintPage
zdarzenie jest skojarzone z metodą obsługi zdarzeń.Uwaga
Jeśli zaimplementowano drukowanie w aplikacji, być może wykonano już krok 5 i 6.
W poniższym przykładzie kodu program obsługi zdarzeń jest używany do drukowania pliku "testPage.txt" w tej samej czcionki użytej w formularzu.
void PrintDocument1_PrintPage(object sender, PrintPageEventArgs e) { int charactersOnPage = 0; int linesPerPage = 0; // Sets the value of charactersOnPage to the number of characters // of stringToPrint that will fit within the bounds of the page. e.Graphics.MeasureString(stringToPrint, this.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charactersOnPage, out linesPerPage); // Draws the string within the bounds of the page. e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic); // Remove the portion of the string that has been printed. stringToPrint = stringToPrint.Substring(charactersOnPage); // Check to see if more pages are to be printed. e.HasMorePages = (stringToPrint.Length > 0); // If there are no more pages, reset the string to be printed. if (!e.HasMorePages) stringToPrint = documentContents; }
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim charactersOnPage As Integer = 0 Dim linesPerPage As Integer = 0 ' Sets the value of charactersOnPage to the number of characters ' of stringToPrint that will fit within the bounds of the page. e.Graphics.MeasureString(stringToPrint, Me.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, charactersOnPage, linesPerPage) ' Draws the string within the bounds of the page. e.Graphics.DrawString(stringToPrint, Me.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic) ' Remove the portion of the string that has been printed. stringToPrint = StringToPrint.Substring(charactersOnPage) ' Check to see if more pages are to be printed. e.HasMorePages = stringToPrint.Length > 0 ' If there are no more pages, reset the string to be printed. If Not e.HasMorePages Then stringToPrint = documentContents End If End Sub
Document Ustaw właściwość kontrolki PrintPreviewDialog na PrintDocument składnik w formularzu.
printPreviewDialog1.Document = printDocument1;
PrintPreviewDialog1.Document = PrintDocument1
Wywołaj metodę ShowDialog w kontrolce PrintPreviewDialog . Zwróć uwagę na wyróżniony kod podany poniżej, zazwyczaj wywołujesz ShowDialogClick metodę obsługi zdarzeń przycisku. Wywołanie ShowDialog wywołuje PrintPage zdarzenie i renderuje dane wyjściowe do kontrolki
PrintPreviewDialog
. Gdy użytkownik wybierze ikonę drukowania w oknie dialogowym,PrintPage
zdarzenie zostanie ponownie zgłoszone, wysyłając dane wyjściowe do drukarki zamiast okna dialogowego podglądu. W związku z tym ciąg jest resetowany na końcu procesu renderowania w kroku 4.Poniższy przykład kodu przedstawia Click metodę obsługi zdarzeń dla przycisku w formularzu. Metoda obsługi zdarzeń wywołuje metody odczytywania dokumentu i wyświetlania okna dialogowego podglądu wydruku.
private void Button1_Click(object sender, EventArgs e) { string docName = "testPage.txt"; string docPath = @"C:\"; string fullPath = System.IO.Path.Combine(docPath, docName); printDocument1.DocumentName = docName; stringToPrint = System.IO.File.ReadAllText(fullPath); printPreviewDialog1.Document = printDocument1; printPreviewDialog1.ShowDialog(); }
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim docName As String = "testPage.txt" Dim docPath As String = "C:\Users\v-rsatao\Desktop\" Dim fullPath As String = System.IO.Path.Combine(docPath, docName) PrintDocument1.DocumentName = docName stringToPrint = System.IO.File.ReadAllText(fullPath) PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub
Zobacz też
.NET Desktop feedback
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla