Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V programování ve Windows Forms je běžné, že kromě tiskových služeb nabízí i náhled tisku. Snadný způsob, jak do aplikace přidat náhled tisku, je použít ovládací prvek v kombinaci s PrintPreviewDialog logikou PrintPage zpracování událostí pro tisk souboru.
Zobrazení náhledu textového dokumentu pomocí ovládacího prvku PrintPreviewDialog
V prostředí Visual Studio použijte podokno Průzkumníka řešení a poklikejte na formulář, z něhož chcete tisknout. Tím se otevře vizuální návrhář.
V podokně panelu nástrojů
poklikejte na komponentu i na komponentu a přidejte je do formuláře. Buď do formuláře přidejte
Button, nebo použijte tlačítko, které už je ve formuláři.V návrháři vizuálu formuláře vyberte tlačítko. V podokně Vlastnosti vyberte tlačítko filtru událostí a poklikáním na událost
Clickvygenerujte obslužnou rutinu události.Kód události
Clickby měl být viditelný. Mimo rozsah obslužné rutiny události přidejte dvě privátní řetězcové proměnné do třídy pojmenovanédocumentContentsastringToPrint.// 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 StringZpět v kódu obslužné rutiny události
Clicknastavte vlastnost DocumentName na dokument, který chcete vytisknout, a otevřete a přečtěte obsah dokumentu do řetězce, který jste přidali dříve.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)Stejně jako při tisku dokumentu použijte v obslužné rutině události PrintPage vlastnost Graphics třídy PrintPageEventArgs a obsah souboru k výpočtu řádků na stránku a vykreslení obsahu dokumentu. Po nakreslení každé stránky zkontrolujte, zda se jedná o poslední stránku, a nastavte HasMorePages vlastnost
PrintPageEventArgsodpovídajícím způsobem. UdálostPrintPagese vyvolává, dokudHasMorePagesnenífalse. Po dokončení vykreslování dokumentu resetujte řetězec, který se má vykreslit. Také se ujistěte, že událostPrintPageje přidružená k metodě zpracovávání událostí.Poznámka:
Pokud jste v aplikaci implementovali tisk, možná už byly dokončeny kroky 5 a 6.
V následujícím příkladu kódu se obslužná rutina události používá k tisku souboru "testPage.txt" ve stejném písmu použitém ve formuláři.
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 SubNastavte vlastnost Document ovládacího prvku PrintPreviewDialog na komponentu PrintDocument ve formuláři.
printPreviewDialog1.Document = printDocument1;PrintPreviewDialog1.Document = PrintDocument1Volání metody ShowDialog na ovládacím prvku PrintPreviewDialog. Obvykle byste volali ShowDialog z metody zpracování událostí tlačítka Click. Všimněte si následujícího zvýrazněného kódu. Volání ShowDialog vyvolá událost PrintPage a zobrazí výstup v ovládacím prvku
PrintPreviewDialog. Když uživatel vybere ikonu tisku v dialogovém okně, vyvolá se událostPrintPageznovu a odešle výstup do tiskárny místo dialogového okna náhledu. Řetězec se proto resetuje na konci procesu vykreslování v kroku 4.Následující příklad kódu ukazuje Click metodu zpracování událostí pro tlačítko ve formuláři. Metoda zpracování událostí volá metody ke čtení dokumentu a zobrazení dialogového okna náhledu tisku.
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
Viz také
- Přehled komponenty PrintDialog
- Tisk vícestrákového textového souboru
- Bezpečnější tisk ve Windows Forms
.NET Desktop feedback