Cara mencetak konten kontrol RichTextBox dengan menggunakan Visual C#.NET atau Visual C# 2005

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 812425 - Melihat produk di mana artikel ini berlaku.
Untuk Microsoft Visual Basic.NET versi ini Pasal, lihat 811401.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini selangkah demi selangkah menjelaskan cara mencetak konten dari RichTextBox kontrol. The RichTextBox kontrol tidak memberikan metode apapun untuk mencetak konten RichTextBox. Anda dapat memperpanjang RichTextBox kelas menggunakan EM_FORMATRANGE pesan untuk mengirim konten dari RichTextBox kontrol untuk perangkat output seperti printer.

Membuat RichTextBoxPrintCtrl kontrol

Contoh berikut menggambarkan cara untuk memperpanjang RichTextBox kelas, dan bagaimana menggunakan EM_FORMATRANGE untuk mencetak konten RichTextBox kontrol.
  1. Dalam Visual C#.NET atau Visual C# 2005, menciptakan proyek perpustakaan kelas baru yang bernama RichTextBoxPrintCtrl. Secara default, Class1.cs dibuat.
  2. Mengubah nama Class1.cs untuk RichTextBoxPrintCtrl.cs.
  3. Dalam solusi Explorer, klik kananReferensi, lalu klik Tambahkan Referensi.
  4. Dalam Menambahkan referensi kotak dialog, Klik dua kali System.Drawing.dll danSystem.Windows.Forms.dll, lalu klikOke.
  5. Mengganti kode yang ada di RichTextBoxPrintCtrl.cs dengan kode berikut:
    using System;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Runtime.InteropServices;
    using System.Drawing.Printing;
    
    namespace RichTextBoxPrintCtrl
    {
    	public class RichTextBoxPrintCtrl:RichTextBox
    	{
    		//Convert the unit used by the .NET framework (1/100 inch) 
    		//and the unit used by Win32 API calls (twips 1/1440 inch)
    		private const double anInch = 14.4;
    
    		[StructLayout(LayoutKind.Sequential)] 
    			private struct RECT
    		{
    			public int Left;
    			public int Top;
    			public int Right;
    			public int Bottom;
    		}
    
    		[StructLayout(LayoutKind.Sequential)]
    			private struct CHARRANGE
    		{
    			public int cpMin;         //First character of range (0 for start of doc)
    			public int cpMax;           //Last character of range (-1 for end of doc)
    		}
    
    		[StructLayout(LayoutKind.Sequential)]
    			private struct FORMATRANGE
    		{
    			public IntPtr hdc;             //Actual DC to draw on
    			public IntPtr hdcTarget;       //Target DC for determining text formatting
    			public RECT rc;                //Region of the DC to draw to (in twips)
    			public RECT rcPage;            //Region of the whole DC (page size) (in twips)
    			public CHARRANGE chrg;         //Range of text to draw (see earlier declaration)
    		}
    
    		private const int WM_USER  = 0x0400;
    		private const int EM_FORMATRANGE  = WM_USER + 57;
    		
    		[DllImport("USER32.dll")]
    		private static extern IntPtr SendMessage (IntPtr hWnd , int msg , IntPtr wp, IntPtr lp); 
    
    		// Render the contents of the RichTextBox for printing
    		//	Return the last character printed + 1 (printing start from this point for next page)
    		public int Print( int charFrom, int charTo,PrintPageEventArgs e)
    		{
    			//Calculate the area to render and print
    			RECT rectToPrint; 
    			rectToPrint.Top = (int)(e.MarginBounds.Top * anInch);
    			rectToPrint.Bottom = (int)(e.MarginBounds.Bottom * anInch);
    			rectToPrint.Left = (int)(e.MarginBounds.Left * anInch);
    			rectToPrint.Right = (int)(e.MarginBounds.Right * anInch);
    
    			//Calculate the size of the page
    			RECT rectPage; 
    			rectPage.Top = (int)(e.PageBounds.Top * anInch);
    			rectPage.Bottom = (int)(e.PageBounds.Bottom * anInch);
    			rectPage.Left = (int)(e.PageBounds.Left * anInch);
    			rectPage.Right = (int)(e.PageBounds.Right * anInch);
    
    			IntPtr hdc = e.Graphics.GetHdc();
    
    			FORMATRANGE fmtRange;
    			fmtRange.chrg.cpMax = charTo;				//Indicate character from to character to 
    			fmtRange.chrg.cpMin = charFrom;
    			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 size of page
    
    			IntPtr res = IntPtr.Zero;
    
    			IntPtr wparam = IntPtr.Zero;
    			wparam = new IntPtr(1);
    
    			//Get the pointer to the FORMATRANGE structure in memory
    			IntPtr lparam= 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();
    		}
    
    	}
    }
  6. Pada Bangun menu, klik Bangun Solusi untuk membuat RichTextBoxPrintCtrl.dll.

Menguji kontrol

  1. Dalam Visual C#.NET atau Visual C# 2005, membuat aplikasi Windows baru proyek. Secara default, Form1.cs dibuat.

    Catatan Kode harus berubah dalam Visual Studio 2005. Bila Anda membuat proyek Windows Forms, Visual C# menambahkan salah satu bentuk proyek secara default. Formulir ini dinamakan Form1. Dua file yang mewakili bentuk yang bernama Form1.cs dan Form1.designer.cs. Anda menulis kode dalam Form1.cs. Designer.cs file adalah di mana Windows Forms Designer menulis kode sumber yang mengimplementasikan semua tindakan Anda dilakukan dengan menambahkan kontrol. Untuk informasi lebih lanjut tentang Windows bentuk desainer Visual C# 2005, kunjungi Web site Microsoft berikut:
    http://msdn2.Microsoft.com/en-us/library/ms173077.aspx
  2. Tarik Tombol kontrol dari toolbox Form1. Perubahan Nama properti untuk btnPageSetup, dan Teks properti untuk Penataan Halaman.
  3. Tarik lain Tombol kontrol dari toolbox Form1. Perubahan Nama properti untuk btnPrintPreview, dan Teks properti untuk Print Preview.
  4. Tarik lain Tombol kontrol dari toolbox Form1. Perubahan Nama properti untuk btnPrint, dan Teks properti untuk Mencetak.
  5. Dalam toolbox, klik dua kali PrintDialog,PrintPreviewDialog, PrintDocument, danPageSetupDialog untuk menambahkan kontrol ini Form1.
  6. Memodifikasi Dokumen sifat PrintDialog1, the PrintPreviewDialog1, dan PageSetupDialog1 kontrol untuk PrintDocument1.
  7. Pada Alat menu, klik Menyesuaikan Toolbox.
  8. Pada .NET Framework komponen tab, Klik People, klik untuk memilihRichTextBoxPrintCtrl.dll, lalu klikOke.
  9. Tarik RichTextBoxPrintCtrl dari toolbox Form1.
  10. Dalam solusi Explorer, klik kananForm1.cs, lalu klik Lihat Kode.
  11. Menambahkan kode berikut untuk InitializeComponent metode:
    		this.printDocument1.BeginPrint += new System.Drawing.Printing.PrintEventHandler(this.printDocument1_BeginPrint);
    		this.printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument1_PrintPage);
    		this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click);
    		this.btnPrintPreview.Click += new System.EventHandler(this.btnPrintPreview_Click);
    		this.btnPageSetup.Click += new System.EventHandler(this.btnPageSetup_Click);
  12. Tambahkan kode berikut untuk kelas Form1:
    		private int checkPrint;
    		private void btnPageSetup_Click(object sender, System.EventArgs e)
    		{
    			pageSetupDialog1.ShowDialog();
    		}
    
    		private void btnPrintPreview_Click(object sender, System.EventArgs e)
    		{
    			printPreviewDialog1.ShowDialog();
    		}
    
    		private void btnPrint_Click(object sender, System.EventArgs e)
    		{
    			if (printDialog1.ShowDialog() == DialogResult.OK)
    				printDocument1.Print();
    		}
    
    		private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
    		{
    			checkPrint = 0;
    		}
    
    		private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    		{
    			// Print the content of RichTextBox. Store the last character printed.
    			checkPrint = richTextBoxPrintCtrl1.Print(checkPrint, richTextBoxPrintCtrl1.TextLength, e);
    
    			// Check for more pages
    			if (checkPrint < richTextBoxPrintCtrl1.TextLength)
    				e.HasMorePages = true;
    			else
    				e.HasMorePages = false;
    		}
  13. Pada Debug menu, klikMulai untuk menjalankan aplikasi. Form1 ditampilkan.
  14. Ketik beberapa teks di RichTextBoxPrintCtrl.
  15. Klik Penataan Halaman untuk mengatur halaman pengaturan.
  16. Klik Print Preview untuk melihat cetak Pratinjau halaman.
  17. Klik Mencetak untuk mencetak konten RichTextBoxPrintCtrl.

REFERENSI

Untuk informasi tambahan, lihat topik berikut di Microsoft.NET Framework SDK dokumentasi:
RichTextBox Kelas
.aspx http://msdn2.Microsoft.com/en-us/library/System.Windows.Forms.richtextbox (vs.71)

Properti

ID Artikel: 812425 - Kajian Terakhir: 03 Oktober 2011 - Revisi: 3.0
Berlaku bagi:
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2005 Express Edition
Kata kunci: 
kbprint kbwindowsforms kbinheritance kbctrl kbcontrol kbhowtomaster kbhowto kbmt KB812425 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:812425

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com