Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het is gebruikelijk in het programmeren van Windows Forms om naast afdrukservices afdrukvoorbeelden aan te bieden. Een eenvoudige manier om een afdrukvoorbeeld aan uw toepassing toe te voegen, is door een PrintPreviewDialog besturingselement te gebruiken in combinatie met PrintPage gebeurtenisafhandelingslogica voor het afdrukken van een bestand.
Gebruik een PrintPreviewDialog-besturingselement om een voorbeeld van een tekstdocument te bekijken.
Gebruik in Visual Studio het deelvenster Solution Explorer en dubbelklik op het formulier waaruit u wilt afdrukken. Hiermee opent u de Visual Designer.
Dubbelklik in het deelvenster Werkset op zowel het PrintDocument-onderdeel als het PrintPreviewDialog-onderdeel om deze aan het formulier toe te voegen.
Voeg een
Buttontoe aan het formulier of gebruik een knop die al in het formulier staat.Selecteer de knop in de Visuele Ontwerper van het formulier. Selecteer in het deelvenster Eigenschappen de knop Gebeurtenis filter en dubbelklik vervolgens op de
Clickgebeurtenis om een gebeurtenis-handler te genereren.De
Click-gebeurteniscode moet zichtbaar zijn. Voeg buiten het bereik van de gebeurtenishandler twee privétekenreeksvariabelen toe aan de klasse met de naamdocumentContentsenstringToPrint:// 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 StringStel in de
Clickgebeurtenishandlercode de eigenschap DocumentName in op het document dat u wilt afdrukken, en open het document en kopieer de inhoud naar de eerder aangemaakte tekenreeks.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)Zoals u zou doen voor het afdrukken van het document, gebruikt u in de gebeurtenis-handler PrintPage de eigenschap Graphics van de klasse PrintPageEventArgs en de bestandsinhoud om het aantal regels per pagina te bepalen en de inhoud van het document weer te geven. Nadat elke pagina is getekend, controleert u of deze de laatste pagina is en stelt u de eigenschap HasMorePages van de
PrintPageEventArgsdienovereenkomstig in. DePrintPagegebeurtenis wordt opgeroepen totdatHasMorePageswordtfalse. Wanneer het document klaar is met renderen, reset dan de tekenreeks die moet worden weergegeven. Zorg er ook voor dat dePrintPagegebeurtenis is gekoppeld aan de methode voor gebeurtenisafhandeling.Opmerking
Als u afdrukken in uw toepassing hebt geïmplementeerd, zijn stap 5 en 6 mogelijk al voltooid.
In het volgende codevoorbeeld wordt de gebeurtenis-handler gebruikt om het bestand 'testPage.txt' af te drukken in hetzelfde lettertype dat op het formulier wordt gebruikt.
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 SubStel de eigenschap Document van het besturingselement PrintPreviewDialog in op het onderdeel PrintDocument in het formulier.
printPreviewDialog1.Document = printDocument1;PrintPreviewDialog1.Document = PrintDocument1Roep de methode ShowDialog aan op het besturingselement PrintPreviewDialog. Let op de volgende gemarkeerde code, die u doorgaans aanroept ShowDialog vanuit de Click methode voor gebeurtenisafhandeling van een knop. Oproepen van ShowDialog veroorzaakt de PrintPage-gebeurtenis, waarna de uitvoer naar het
PrintPreviewDialog-besturingselement wordt uitgevoerd. Wanneer de gebruiker het afdrukpictogram in het dialoogvenster selecteert, wordt de gebeurtenisPrintPageopnieuw gegenereerd en wordt de uitvoer naar de printer verzonden in plaats van het voorbeelddialoogvenster. Daarom wordt de tekenreeks opnieuw ingesteld aan het einde van het renderingproces in stap 4.In het volgende codevoorbeeld ziet u de methode Click gebeurtenisafhandeling voor een knop in het formulier. Met de methode voor gebeurtenisafhandeling worden de methoden aangeroepen om het document te lezen en het dialoogvenster Afdrukvoorbeeld weer te geven.
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
Zie ook
.NET Desktop feedback