Mega Code Archive

 
Categories / C# Tutorial / GUI Windows Forms
 

Print Preview Dialog for printing text file

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO; using System.Drawing.Printing; public class PrintPreviewDialog : System.Windows.Forms.Form {   private System.Windows.Forms.TextBox txtFile;   private System.Windows.Forms.Button btnOpenFile;   private System.Windows.Forms.Button btnSaveFile;   private System.ComponentModel.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= Font;   private PrintDocument printDocument = new PrintDocument();   private StringReader stringReader;   private OpenFileDialog openFileDialog = new OpenFileDialog();   public PrintPreviewDialog()   {     InitializeComponent();          printDocument.PrintPage += new PrintPageEventHandler(pdPrintPage);     printDocument.BeginPrint += new PrintEventHandler(pdBeginPrint);     printDocument.EndPrint += new PrintEventHandler(pdEndPrint);   }   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);     //      // PrintPreviewDialog     //      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 PrintPreviewDialog());   }   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)   {     PrintPreviewDialog ppdlg = new PrintPreviewDialog();     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.");   } }