Bu adım adım makalede, RichTextBox denetiminin içeriği yazdırmak açıklamaktadır. RichTextBox denetiminin RichTextBox içeriğini yazdırmak için başka bir yöntem sağlar. RichTextBox sınıfı EM_FORMATRANGE iletinin içeriği RichTextBox denetiminin yazıcı gibi bir çıktı aygıtına göndermek için kullanılacak genişletebilirsiniz.
Aşağıdaki örnek, nasıl yapılır: RichTextBox sınıfını ve EM_FORMATRANGE RichTextBox denetiminin içeriği yazdırmak için nasıl kullanılacağını açıklar.
Visual C# .NET veya Visual C# 2005 RichTextBoxPrintCtrl adlı yeni bir sınıf kitaplığı projesi oluşturun. Varsayılan olarak, Class1.cs oluşturulur.
Class1.cs RichTextBoxPrintCtrl.cs için değiştirin.
Solution Explorer'da (Çözüm Gezgini), Başvurular ' ı sağ tıklatın ve sonra Add Reference</a1>'ı tıklatın.
Başvuru Ekle) iletişim kutusunda, System.Drawing.dll ve System.Windows.Forms.dll çift tıklatın ve sonra Tamam ' ı tıklatın.
Replace the existing code in RichTextBoxPrintCtrl.cs with the following code:
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();
}
}
}
Visual C# .NET veya Visual C# 2005, yeni bir Windows uygulaması oluşturma proje. Varsayılan olarak, Form1.cs oluşturulur.
Not Kod, Visual Studio 2005'te değiştirilmelidir. Windows Forms bir proje oluşturduğunuzda, Visual C# bir form projeye varsayılan olarak ekler. Bu formu Form1 ' dir. Form temsil eden iki dosya Form1.cs ve Form1.designer.cs olarak adlandırılır. Kodunuzu, Form1.cs içinde yazın. Burada Windows Form Designer denetimleri ekleyerek gerçekleştirilen tüm eylemleri gerçekleştiren kod yazma Designer.cs dosyasıdır. Visual C# 2005'te Windows Forms Tasarımcısı hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
Araç kutusundan, bir Düğme denetimi Form1'e sürükleyin. Name özelliği, btnPageSetup ve Sayfa düzeni için <a2>Text</a2> özelliğini değiştirin.
Araç kutusundan, başka bir Düğme denetimi Form1'e sürükleyin. Name özelliği, btnPrintPreview ve Baskı Önizleme için <a2>Text</a2> özelliğini değiştirin.
Araç kutusundan, başka bir Düğme denetimi Form1'e sürükleyin. Name özelliği, btnPrint ve yazdırma için <a2>Text</a2> özelliğini değiştirin.
Araç kutusunda, PrintDialogPrintPreviewDialog, PrintDocument ve PageSetupDialog'un bu denetimler Form1'e eklemek için çift tıklatın.
PrintDialog1, PrintPreviewDialog1 ve PrintDocument1PageSetupDialog1 denetimlere belge özelliklerini değiştirin.
Araçlar menüsünde Özelleştir araç.
.NET Framework bileşenleri sekmesinde Gözat ' ı tıklatın, RichTextBoxPrintCtrl.dll seçmek için tıklatın ve sonra Tamam ' ı tıklatın.
Araç kutusundan, RichTextBoxPrintCtrl Form1'e sürükleyin.
Solution Explorer'da (Çözüm Gezgini), Form1.cs ' ı sağ tıklatın ve Kod Görüntüle</a1>'ı tıklatın.
Aşağıdaki kod ınitializecomponent yöntemini ekleyin:
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);
Form1 sınıfına aşağıdaki kodu ekleyin:
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;
}
Hata Ayıkla) menüsünde, uygulamayı çalıştırmak için Başlat ' ı tıklatın. Form1 görüntülenir.
Bazı metinler RichTextBoxPrintCtrl içinde yazın.
Sayfa ayarlarını ayarlamak için Sayfa Yapısı ' nı tıklatın.
Sayfanın baskı önizlemeyi görüntülemek için Baskı Önizleme ' yi tıklatın.
RichTextBoxPrintCtrl içeriğini yazdırmak için Yazdır ' ı tıklatın.
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:812425
(http://support.microsoft.com/kb/812425/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.