2013-10-11 108 views
7

現在,我正在試圖在PrintDocument上構建我的表單,但是要查看頁面上實際顯示的內容的唯一方法是打印一張紙。它很有用,但我需要添加很多東西,我寧願不浪費大量紙張。現在我有一個打印對話框出現,但沒有打印預覽按鈕。有沒有辦法讓人出現?謝謝!在C#中顯示打印預覽#

public partial class Form4 : System.Windows.Forms.Form 
    { 
     private System.ComponentModel.Container components; 
     private System.Windows.Forms.Button printButton; 

     public Form4() 
     { 
      // The Windows Forms Designer requires the following call. 
      InitializeComponent(); 
     } 

     // The Click event is raised when the user clicks the Print button. 
     private void printButton_Click(object sender, EventArgs e) 
     { 
      PrintDocument pd = new PrintDocument(); 
      pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage); 
      PrintDialog pdi = new PrintDialog(); 
      pdi.Document = pd; 
      if (pdi.ShowDialog() == DialogResult.OK) 
      { 
       pd.Print(); 
      } 

     } 

     // The PrintPage event is raised for each page to be printed. 
     private void pd_PrintPage(object sender, PrintPageEventArgs e) 
     { 
      Single yPos = 0; 
      Single leftMargin = e.MarginBounds.Left; 
      Single topMargin = e.MarginBounds.Top; 
      Image img = Image.FromFile("logo.bmp"); 
      Rectangle logo = new Rectangle(40, 40, 50, 50); 
      using (Font printFont = new Font("Arial", 20.0f)) 
      { 
       e.Graphics.DrawImage(img, logo); 
       e.Graphics.DrawString("Header", printFont, Brushes.Black, leftMargin, yPos, new StringFormat()); 
      } 
      using (SolidBrush blueBrush = new SolidBrush(Color.Black)) 
      { 
       Rectangle rect = new Rectangle(100, 100, 500, 120); 
       e.Graphics.FillRectangle(blueBrush, rect); 
      } 
     } 


     // The Windows Forms Designer requires the following procedure. 
     private void InitializeComponent() 
     { 
      this.components = new System.ComponentModel.Container(); 
      this.printButton = new System.Windows.Forms.Button(); 

      this.ClientSize = new System.Drawing.Size(504, 381); 
      this.Text = "Print Example"; 

      printButton.ImageAlign = 
       System.Drawing.ContentAlignment.MiddleLeft; 
      printButton.Location = new System.Drawing.Point(32, 110); 
      printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 
      printButton.TabIndex = 0; 
      printButton.Text = "Print the file."; 
      printButton.Size = new System.Drawing.Size(136, 40); 
      printButton.Click += new System.EventHandler(printButton_Click); 

      this.Controls.Add(printButton); 
     } 

    } 
+0

我是你正在使用Windows窗體,以便確保用'winforms'標籤來標記您的問題積極。您可以使用[PrintPreviewControl](http://msdn.microsoft.com/en-us/library/system.windows.forms.printpreviewcontrol.aspx)來達到此目的。 –

回答

7

您可以使用此一PrintPreviewDialog

private void printButton_Click(object sender, EventArgs e) 
{ 
    PrintDocument pd = new PrintDocument(); 
    pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage); 

    PrintDialog printdlg = new PrintDialog(); 
    PrintPreviewDialog printPrvDlg = new PrintPreviewDialog(); 

    // preview the assigned document or you can create a different previewButton for it 
    printPrvDlg.Document = pd; 
    printPrvDlg.ShowDialog(); // this shows the preview and then show the Printer Dlg below 

    printdlg.Document = pd; 

    if (printdlg.ShowDialog() == DialogResult.OK) 
    { 
     pd.Print(); 
    } 
} 
+0

注意:PrintPreviewDialog是System.Windows.Forms命名空間的一部分。 – Jeff