Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det är vanligt i Windows Forms-programmering att erbjuda förhandsgranskning utöver utskriftstjänster. Ett enkelt sätt att lägga till förhandsgranskning i ditt program är att använda en PrintPreviewDialog kontroll i kombination med PrintPage logik för händelsehantering för att skriva ut en fil.
Förhandsgranska ett textdokument med en PrintPreviewDialog-kontroll
I Visual Studio använder du fönstret Solution Explorer och dubbelklickar på formuläret som du vill skriva ut från. Detta öppnar den visuella designern.
I fönstret Toolbox dubbelklickar du på både komponenten PrintDocument och komponenten PrintPreviewDialog för att lägga till dem i formuläret.
Lägg antingen till en
Buttoni formuläret eller använd en knapp som redan finns i formuläret.Välj knappen i formulärets visuella designer. I fönstret Egenskaper väljer du filterknappen Händelse och dubbelklickar sedan på händelsen
Clickför att generera en händelsehanterare.Händelsekoden
Clickska vara synlig. Utanför händelsehanterarens omfång lägger du till två privata strängvariabler i klassen med namnetdocumentContentsochstringToPrint:// 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 StringTillbaka i händelsehanterarkoden för
Clicktilldelar du egenskapen DocumentName det dokument du vill skriva ut, och öppnar och läser dokumentets innehåll till strängen som du tidigare deklarerade.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)Som när du skriver ut dokumentet använder du PrintPage-egenskapen för klassen Graphics och filinnehållet i PrintPageEventArgs händelsehanteraren för att beräkna rader per sida och återge dokumentets innehåll. När varje sida har ritats kontrollerar du om det är den sista sidan och anger egenskapen HasMorePages för
PrintPageEventArgs. HändelsenPrintPageutlöses tillsHasMorePagesärfalse. När dokumentet är klart återställer du strängen som ska renderas. Se också till att denPrintPagehändelsen är associerad med dess händelsehanteringsmetod.Anmärkning
Om du har implementerat utskrifter i programmet kanske steg 5 och 6 redan har slutförts.
I följande kodexempel används händelsehanteraren för att skriva ut filen "testPage.txt" med samma teckensnitt som används i formuläret.
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 SubAnge Document-egenskapen för PrintPreviewDialog-kontrollen till PrintDocument komponenten i formuläret.
printPreviewDialog1.Document = printDocument1;PrintPreviewDialog1.Document = PrintDocument1Anropa metoden ShowDialog på kontrollen PrintPreviewDialog. Observera följande markerade kod, du anropar ShowDialog vanligtvis från Click händelsehanteringsmetoden för en knapp. Anrop av ShowDialog genererar PrintPage-händelsen och återsänder resultatet till
PrintPreviewDialog-kontroll. När användaren väljer utskriftsikonen i dialogrutan utlöses händelsenPrintPageigen och skickar utdata till skrivaren i stället för förhandsgranskningsdialogrutan. Därför återställs strängen i slutet av återgivningsprocessen i steg 4.I följande kodexempel visas metoden Click händelsehantering för en knapp i formuläret. Händelsehanteringsmetoden anropar metoderna för att läsa dokumentet och visa dialogrutan för förhandsgranskning.
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
Se även
.NET Desktop feedback