И как реализовать при этом предварительный просмотр перед печатью?
Собственно есть текст в TextBox. Создал menuStrip создал кнопку Print. Добавил printDialog, printDocument и printPreviewDialog. Далее подсмотрел такой вот код для реализации печати:
private string strToPrint = String.Empty;
private void printToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Drawing.Printing.PrintDocument f = new System.Drawing.Printing.PrintDocument();
PrintDialog theDialog = new PrintDialog();
System.Drawing.Printing.PrintDocument thePrintDocument = new System.Drawing.Printing.PrintDocument();
theDialog.Document = thePrintDocument;
theDialog.ShowDialog();
foreach (Control curControl in this.Controls)
{
this.strToPrint += curControl.Text + " ";
}
//the for each loop above is probably useless for you, just take it out and only append to "strToPrint" the text you want to print from wherever it is.
thePrintDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
thePrintDocument.Print();
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int linesPerPage = 0;
int charsOnPage = 0;
e.Graphics.MeasureString(this.strToPrint, this.Font, e.MarginBounds.Size, StringFormat.GenericTypographic, out charsOnPage, out linesPerPage);
e.Graphics.DrawString(this.strToPrint, this.Font, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic);
this.strToPrint = this.strToPrint.Substring(charsOnPage);
e.HasMorePages = (this.strToPrint.Length > 0);
}
Код полностью мне непонятен, в результате на печати пустой альбомный лист.
Посмотрите в сторону RichTextBoxDocument — он превращает форматированный текст из RichTextBox в полноценный PrintDocument, который можно подсунуть в printPreviewDialog и printDialog.