Csharp/CSharp Tutorial/GUI Windows Forms/PrintDialog
Display PrintDialog
<source lang="csharp">using System; using System.Drawing; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Drawing.Printing; public class PrintDialogDemo : System.Windows.Forms.Form {
private System.Windows.Forms.TextBox txtFile; private System.Windows.Forms.Button btnOpenFile; private System.Windows.Forms.Button btnSaveFile; private System.ruponentModel.Container components = null; private System.Windows.Forms.Button btnPageSetup; private System.Windows.Forms.Button btnPrint; private System.Windows.Forms.Button btnPrintPreview; private String strFileName; private Font currentFont = null; private PrintDocument printDocument = new PrintDocument(); private StringReader stringReader; private OpenFileDialog openFileDialog = new OpenFileDialog(); public PrintDialogDemo() { InitializeComponent(); printDocument.PrintPage += new PrintPageEventHandler(pdPrintPage); printDocument.BeginPrint += new PrintEventHandler(pdBeginPrint); printDocument.EndPrint += new PrintEventHandler(pdEndPrint); currentFont= Font; } private void InitializeComponent() { this.txtFile = new System.Windows.Forms.TextBox(); this.btnOpenFile = new System.Windows.Forms.Button(); this.btnSaveFile = new System.Windows.Forms.Button(); this.btnPageSetup = new System.Windows.Forms.Button(); this.btnPrint = new System.Windows.Forms.Button(); this.btnPrintPreview = new System.Windows.Forms.Button(); this.SuspendLayout(); // // txtFile // this.txtFile.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right); this.txtFile.Location = new System.Drawing.Point(40, 24); this.txtFile.Multiline = true; this.txtFile.Name = "txtFile"; this.txtFile.Size = new System.Drawing.Size(500, 150); this.txtFile.TabIndex = 0; this.txtFile.Text = ""; // // btnOpenFile // this.btnOpenFile.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left); this.btnOpenFile.Location = new System.Drawing.Point(48, 256); this.btnOpenFile.Name = "btnOpenFile"; this.btnOpenFile.TabIndex = 1; this.btnOpenFile.Text = "Open File"; this.btnOpenFile.Click += new System.EventHandler(this.btnOpenFile_Click); // // btnSaveFile // this.btnSaveFile.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left); this.btnSaveFile.Location = new System.Drawing.Point(144, 256); this.btnSaveFile.Name = "btnSaveFile"; this.btnSaveFile.TabIndex = 2; this.btnSaveFile.Text = "Save File"; this.btnSaveFile.Click += new System.EventHandler(this.btnSaveFile_Click); // // btnPageSetup // this.btnPageSetup.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left); this.btnPageSetup.Location = new System.Drawing.Point(240, 344); this.btnPageSetup.Name = "btnPageSetup"; this.btnPageSetup.TabIndex = 8; this.btnPageSetup.Text = "Page Setup"; this.btnPageSetup.Click += new System.EventHandler(this.btnPageSetup_Click); // // btnPrint // this.btnPrint.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left); this.btnPrint.Location = new System.Drawing.Point(48, 344); this.btnPrint.Name = "btnPrint"; this.btnPrint.TabIndex = 6; this.btnPrint.Text = "Print"; this.btnPrint.Click += new System.EventHandler(this.btnPrint_Click); // // btnPrintPreview // this.btnPrintPreview.Anchor = (System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left); this.btnPrintPreview.Location = new System.Drawing.Point(144, 344); this.btnPrintPreview.Name = "btnPrintPreview"; this.btnPrintPreview.Size = new System.Drawing.Size(80, 23); this.btnPrintPreview.TabIndex = 7; this.btnPrintPreview.Text = "Print Preview"; this.btnPrintPreview.Click += new System.EventHandler(this.btnPrintPreview_Click); // // PrintDialogDemo // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(592, 398); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.btnPrintPreview, this.btnPrint, this.btnPageSetup, this.btnSaveFile, this.btnOpenFile, this.txtFile}); this.ResumeLayout(false); } [STAThread] static void Main() { Application.Run(new PrintDialogDemo()); } private void btnOpenFile_Click(object sender, System.EventArgs e) { openFileDialog.InitialDirectory = @"c:\"; openFileDialog.Filter = "Text files (*.txt)|*.txt|" + "All files (*.*)|*.*"; openFileDialog.FilterIndex = 1; // 1 based index if (openFileDialog.ShowDialog() == DialogResult.OK) { StreamReader reader = new StreamReader(openFileDialog.FileName); try { strFileName = openFileDialog.FileName; txtFile.Text = reader.ReadToEnd(); } catch (Exception ex) { MessageBox.Show(ex.Message); return; } finally { reader.Close(); } } } private void btnSaveFile_Click(object sender, System.EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.InitialDirectory = @"c:\"; sfd.Filter = "Text files (*.txt)|*.txt|" + "All files (*.*)|*.*"; sfd.FilterIndex = 1; // 1 based index if (strFileName != null) sfd.FileName = strFileName; else sfd.FileName = "*.txt"; if (sfd.ShowDialog() == DialogResult.OK) { StreamWriter writer = new StreamWriter(strFileName,false); try { strFileName = sfd.FileName; writer.Write(txtFile.Text); } catch(Exception ex) { MessageBox.Show(ex.Message); return; } finally { writer.Close(); } } } private void btnPageSetup_Click(object sender, System.EventArgs e) { PageSetupDialog psd = new PageSetupDialog(); psd.Document = printDocument; psd.ShowDialog(); } private void btnPrint_Click(object sender, System.EventArgs e) { PrintDialog pdlg = new PrintDialog(); pdlg.Document = printDocument; if (pdlg.ShowDialog() == DialogResult.OK) { try { printDocument.Print(); } catch(Exception ex) { MessageBox.Show("Print error: " + ex.Message); } } } private void btnPrintPreview_Click(object sender, System.EventArgs e) { PrintDialog ppdlg = new PrintDialog(); ppdlg.Document = printDocument; ppdlg.ShowDialog(); } private void pdPrintPage(object sender, PrintPageEventArgs e) { float linesPerPage = 0; float verticalOffset = 0; float leftMargin = e.MarginBounds.Left; float topMargin = e.MarginBounds.Top; int linesPrinted = 0; String strLine = null; linesPerPage = e.MarginBounds.Height / currentFont.GetHeight(e.Graphics); while (linesPrinted < linesPerPage && ((strLine = stringReader.ReadLine())!= null )) { verticalOffset = topMargin + (linesPrinted * currentFont.GetHeight(e.Graphics)); e.Graphics.DrawString(strLine, currentFont, Brushes.Black, leftMargin, verticalOffset); linesPrinted++; } if (strLine != null) e.HasMorePages = true; else e.HasMorePages = false; } private void pdBeginPrint(object sender, PrintEventArgs e) { stringReader = new StringReader(txtFile.Text); currentFont = txtFile.Font; } private void pdEndPrint(object sender, PrintEventArgs e) { stringReader.Close(); MessageBox.Show("Done printing."); }
}</source>
Prompt PrintDialog
<source lang="csharp">using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Printing; public class PrintDialogPrint : Form {
public PrintDialogPrint() { this.cmdPrint = new System.Windows.Forms.Button(); this.SuspendLayout(); // this.cmdPrint.Location = new System.Drawing.Point(109, 122); this.cmdPrint.Size = new System.Drawing.Size(75, 23); this.cmdPrint.Text = "Print"; this.cmdPrint.UseVisualStyleBackColor = true; this.cmdPrint.Click += new System.EventHandler(this.cmdPrint_Click); // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(272, 260); this.Controls.Add(this.cmdPrint); this.Text = "Simple Print"; this.ResumeLayout(false); } private void cmdPrint_Click(object sender, EventArgs e) { PrintDocument doc = new PrintDocument(); doc.PrintPage += this.Doc_PrintPage; PrintDialog dlgSettings = new PrintDialog(); dlgSettings.Document = doc; if (dlgSettings.ShowDialog() == DialogResult.OK) { doc.Print(); } } private void Doc_PrintPage(object sender, PrintPageEventArgs e) { Font font = new Font("Arial", 30); float x = e.MarginBounds.Left; float y = e.MarginBounds.Top; float lineHeight = font.GetHeight(e.Graphics); for (int i = 0; i < 5; i++) { e.Graphics.DrawString("This is line " + i.ToString(),font, Brushes.Black, x, y); y += lineHeight; } y += lineHeight; e.Graphics.DrawImage(Image.FromFile("c:\\YourFile.bmp"), x, y); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new PrintDialogPrint()); } private System.Windows.Forms.Button cmdPrint;
}</source>