Αναγν. άρθρου: 811401 - Τελευταία αναθεώρηση: Κυριακή, 29 Μαΐου 2011 - Αναθεώρηση: 4.0

Πώς να εκτυπώνετε περιεχόμενο ενός στοιχείου ελέγχου RichTextBox χρησιμοποιώντας τη Visual Basic.NET ή Visual Basic 2005

Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.
Για την έκδοση αυτού του Microsoft Visual Basic 6.0 το άρθρο, ανατρέξτε στην ενότητα 146022  (http://support.microsoft.com/kb/146022/EN-US/ ) .
Για μια οπτική Microsoft C#.NET έκδοση αυτού του άρθρου, ανατρέξτε στο θέμα 812425  (http://support.microsoft.com/kb/812425/ ) .

Σε αυτήν τη σελίδα

Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο εκτύπωσης του περιεχομένου από μια RichTextBox στοιχείο ελέγχου. Το RichTextBox στοιχείο ελέγχου παρέχουν μια μέθοδο για να εκτυπώσετε το περιεχόμενό του. Ωστόσο, Μπορείτε να επεκτείνετε το RichTextBox Κλάση για να χρησιμοποιήσετε το μήνυμα EM_FORMATRANGE. Μπορείτε να στείλετε το περιεκτικότητα σε RichTextBox σε μια συσκευή εξόδου, όπως ένας εκτυπωτής.

Δημιουργία ενός στοιχείου ελέγχου RichTextBoxPrintCtrl

Για να επεκτείνετε το RichTextBox Κλάση και χρησιμοποιήστε το EM_FORMATRANGE για να εκτυπώσετε το περιεχόμενο του RichTextBox τον έλεγχο, ακολουθήστε τα εξής βήματα:
  1. Χρήση της Microsoft Visual Basic.NET ή 2005 Microsoft Visual Basic για να δημιουργήσετε μια νέα κλάση Βιβλιοθήκη έργο με όνομα RichTextBoxPrintCtrl.

    Από προεπιλογή, δημιουργείται Class1.vb.
  2. Αλλάξτε το όνομα του αρχείου Class1.vbRichTextBoxPrintCtrl.vb.
  3. Στην Εξερεύνηση λύση, κάντε δεξιό κλικΑναφορές, και στη συνέχεια κάντε κλικ στο κουμπί Προσθήκη Αναφορά.
  4. Με το Προσθήκη αναφοράς στο παράθυρο διαλόγου, κάντε διπλό κλικ System.Drawing.dll, και Κάντε διπλό κλικ System.Windows.Forms.dll.
  5. Για να προσθέσετε αναφορές, κάντε κλικ στο κουμπί OK.
  6. Διαγράψτε τον υπάρχοντα κώδικαRichTextBoxPrintCtrl.vb.
  7. Αντιγράψτε τον παρακάτω κώδικα στοRichTextBoxPrintCtrl.vb:
    Option Explicit On 
    
    Imports System
    Imports System.Windows.Forms
    Imports System.Drawing
    Imports System.Runtime.InteropServices
    Imports System.Drawing.Printing
    
    Namespace RichTextBoxPrintCtrl
       Public Class RichTextBoxPrintCtrl
          Inherits RichTextBox
          ' Convert the unit that is used by the .NET framework (1/100 inch) 
          ' and the unit that is used by Win32 API calls (twips 1/1440 inch)
          Private Const AnInch As Double = 14.4
    
          <StructLayout(LayoutKind.Sequential)> _
           Private Structure RECT
             Public Left As Integer
             Public Top As Integer
             Public Right As Integer
             Public Bottom As Integer
          End Structure
    
          <StructLayout(LayoutKind.Sequential)> _
          Private Structure CHARRANGE
             Public cpMin As Integer          ' First character of range (0 for start of doc)
             Public cpMax As Integer          ' Last character of range (-1 for end of doc)
          End Structure
    
          <StructLayout(LayoutKind.Sequential)> _
          Private Structure FORMATRANGE
             Public hdc As IntPtr             ' Actual DC to draw on
             Public hdcTarget As IntPtr       ' Target DC for determining text formatting
             Public rc As Rect                ' Region of the DC to draw to (in twips)
             Public rcPage As Rect            ' Region of the whole DC (page size) (in twips)
             Public chrg As CHARRANGE         ' Range of text to draw (see above declaration)
          End Structure
    
          Private Const WM_USER As Integer = &H400
          Private Const EM_FORMATRANGE As Integer = WM_USER + 57
    
          Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr) As IntPtr
    
          ' Render the contents of the RichTextBox for printing
          '	Return the last character printed + 1 (printing start from this point for next page)
          Public Function Print(ByVal charFrom As Integer, ByVal charTo As Integer, ByVal e As PrintPageEventArgs) As Integer
    
             ' Mark starting and ending character 
             Dim cRange As CHARRANGE
             cRange.cpMin = charFrom
             cRange.cpMax = charTo
    
             ' Calculate the area to render and print
             Dim rectToPrint As RECT
             rectToPrint.Top = e.MarginBounds.Top * AnInch
             rectToPrint.Bottom = e.MarginBounds.Bottom * AnInch
             rectToPrint.Left = e.MarginBounds.Left * AnInch
             rectToPrint.Right = e.MarginBounds.Right * AnInch
    
             ' Calculate the size of the page
             Dim rectPage As RECT
             rectPage.Top = e.PageBounds.Top * AnInch
             rectPage.Bottom = e.PageBounds.Bottom * AnInch
             rectPage.Left = e.PageBounds.Left * AnInch
             rectPage.Right = e.PageBounds.Right * AnInch
    
             Dim hdc As IntPtr = e.Graphics.GetHdc()
    
             Dim fmtRange As FORMATRANGE
             fmtRange.chrg = cRange                 ' Indicate character from to character to 
             fmtRange.hdc = hdc                     ' Use the same DC for measuring and rendering
             fmtRange.hdcTarget = hdc               ' Point at printer hDC
             fmtRange.rc = rectToPrint              ' Indicate the area on page to print
             fmtRange.rcPage = rectPage             ' Indicate whole size of page
    
             Dim res As IntPtr = IntPtr.Zero          
    
             Dim wparam As IntPtr = IntPtr.Zero
             wparam = New IntPtr(1)
    
             ' Move the pointer to the FORMATRANGE structure in memory
             Dim lparam As IntPtr = IntPtr.Zero
             lparam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fmtRange))
             Marshal.StructureToPtr(fmtRange, lparam, False)
    
             ' Send the rendered data for printing 
             res = SendMessage(Handle, EM_FORMATRANGE, wparam, lparam)
    
             ' Free the block of memory allocated
             Marshal.FreeCoTaskMem(lparam)
    
             ' Release the device context handle obtained by a previous call
             e.Graphics.ReleaseHdc(hdc)
    
             ' Return last + 1 character printer
             Return res.ToInt32()
          End Function
    
       End Class
    End Namespace
    
  8. Για να δημιουργήσετε RichTextBoxPrintCtrl.dll, κάντε κλικ στο κουμπίΔόμηση λύσεων από το Δόμηση μενού.

Δοκιμή του στοιχείου ελέγχου

Για να ελέγξετε το στοιχείο ελέγχου, ακολουθήστε τα εξής βήματα:
  1. Δημιουργήστε ένα νέο έργο εφαρμογών των Windows χρησιμοποιώντας το Visual Βασικό.NET ή 2005 Visual Basic.

    Από προεπιλογή, δημιουργείται Form1.vb.
  2. Από την εργαλειοθήκη, σύρετε ένα κουμπί Form1. Αλλάξτε το όνομα Για να btnPageSetup, και να αλλάξετε το κείμενο Σελίδα Το πρόγραμμα εγκατάστασης.
  3. Από την εργαλειοθήκη, σύρετε ένα άλλο κουμπί Form1. Αλλαγή το όνομα btnPrintPreview, και να αλλάξετε το κείμενοΠροεπισκόπηση εκτύπωσης.
  4. Από την εργαλειοθήκη, σύρετε ένα άλλο κουμπί Form1. Αλλαγή το όνομα btnPrint, και να αλλάξετε το κείμενοΕκτύπωση.
  5. Στην εργαλειοθήκη, κάντε διπλό κλικ PrintDialog, Κάντε διπλό κλικ PrintPreviewDialog, κάντε διπλό κλικPrintDocument, και στη συνέχεια κάντε διπλό κλικPageSetupDialog Για να προσθέσετε αυτά τα στοιχεία ελέγχου Form1.
  6. Τροποποίηση του Το έγγραφο ιδιότητα PrintDialog1,PrintPreviewDialog1, και PageSetupDialog1 Για ναPrintDocument1.
  7. Από το Εργαλεία μενού, κάντε κλικ στο κουμπί Προσαρμογή Εργαλειοθήκη.
  8. Κάντε κλικ στο κουμπί .NET Framework στοιχεία, κάντε κλικ στο κουμπίΑναζήτηση, κάντε κλικ στην επιλογήRichTextBoxPrintCtrl.dll, και στη συνέχεια κάντε κλικ στο κουμπίOK.
  9. Από την εργαλειοθήκη, σύρετεRichTextBoxPrintCtrl σε Form1.
  10. Στην Εξερεύνηση λύση, κάντε δεξιό κλικForm1.VB, και στη συνέχεια κάντε κλικ στο κουμπί Προβολή Κώδικα.
  11. Προσθέστε τον ακόλουθο κώδικα κλάσης Form1:
       Private checkPrint As Integer
    
       Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
          checkPrint = 0
       End Sub
    
       Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
          ' Print the content of the RichTextBox. Store the last character printed.
          checkPrint = RichTextBoxPrintCtrl1.Print(checkPrint, RichTextBoxPrintCtrl1.TextLength, e)
    
          ' Look for more pages
          If checkPrint < RichTextBoxPrintCtrl1.TextLength Then
             e.HasMorePages = True
          Else
             e.HasMorePages = False
          End If
       End Sub
    
       Private Sub btnPageSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPageSetup.Click.Click
          PageSetupDialog1.ShowDialog()
       End Sub
    
       Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
          If PrintDialog1.ShowDialog() = DialogResult.OK Then
             PrintDocument1.Print()
          End If
       End Sub
    
       Private Sub btnPrintPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrintPreview.Click
          PrintPreviewDialog1.ShowDialog()
       End Sub
  12. Για να εκτελέσετε την εφαρμογή, κάντε κλικ στο κουμπί Έναρξη από τοΟ εντοπισμός σφαλμάτων μενού.
  13. Πληκτρολογήστε κείμενο στοRichTextBoxPrintCtrl.
  14. Για να ορίσετε τις ρυθμίσεις σελίδας, κάντε κλικ στο κουμπί Σελίδα Το πρόγραμμα εγκατάστασης.
  15. Για να δείτε μια προεπισκόπηση της σελίδας, κάντε κλικ στο κουμπί Εκτύπωση Προεπισκόπηση.
  16. Για να εκτυπώσετε το περιεχόμενο τουRichTextBoxPrintCtrl, κάντε κλικ στο κουμπί Εκτύπωση.

Αναφορές

Για περισσότερες πληροφορίες, επισκεφθείτε την τοποθεσία της Microsoft.NET Framework Λογισμικό Development Kit (SDK) τεκμηρίωση ή την ηλεκτρονική Βοήθεια των παρακάτω MSDN Τοποθεσία στο Web:
Κλάση RichTextBox
.aspx http://msdn2.Microsoft.com/en-us/library/System.Windows.Forms.RichTextBox (vs.71) (http://msdn2.microsoft.com/en-us/library/system.windows.forms.richtextbox(vs.71).aspx)

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
Λέξεις-κλειδιά: 
kbvs2005swept kbvs2005applies kbprint kbinheritance kbwindowsforms kbctrl kbcontrol kbhowtomaster kbhowto kbmt KB811401 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:811401  (http://support.microsoft.com/kb/811401/en-us/ )