2010-03-25 154 views
1

我已經使用.NET的PrintDocument,PrintDialog和PrintPreviewDialog類成功實施了我的應用程序的打印和打印預覽。在自定義打印預覽對話框中使用打印預覽控件

但是,我的應用程序使用工具包來改善標準.NET控件的外觀。工具包中有大多數.NET控件的版本,但沒有用於打印控件。

因此,爲了確保這些控件的外觀與應用程序的其餘部分相匹配,我創建了基於工具包窗體並在其中嵌入.NET PrintPrewviewControl的自定義PrintPreviewDialog。

我的問題是,PrintPreviewControl總是顯示「沒有頁面顯示」。我毫不費力地使用.NET PrintPreviewDialog工作,看不到我做錯了什麼。

這是一個.NET 2.0 PrintPreviewControl,所以我知道我需要在分配PrintDocument後調用InvalidatePreview()。然而,它似乎並不無論身在何處,我把它,PrintPage事件處理程序不會被調用......

public class PrintEngine 
    { 
      ...rest of class... 

     public PrintEngine() 
     { 
     m_printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage); 
     } 

     public void PrintPreview() 
     { 
     //ORIGINAL CODE USING .NET DIALOG WORK OK 
     //PrintPreviewDialog dlg1 = new PrintPreviewDialog(); 
     //dlg1.Document = m_printDoc; 
     //PrepareImageForPrinting(); 
     //dlg1.ShowDialog(); 

     //CODE USING MY CUSTOM DIALOG DO NOT WORK? 
     MyPrintPreviewDialog dlg2 = new MyPrintPreviewDialog(); 

     dlg2.Document = m_printDoc; 

     PrepareImageForPrinting(); //Creates the m_printImage List 

     dlg2.ShowDialog(); 
     } 

     private void printDoc_PrintPage(object sender, PrintPageEventArgs e) 
     { 
     e.Graphics.DrawImage(m_printImages[m_currentPage], new Point(0, 0)); 

     m_currentPage++; 

     e.HasMorePages = m_currentPage < m_pagesHigh; 
     } 

    }//end PrintEngine class 

    public class MyPrintPreviewDialog : KryptonForm 
    { 
     public PrintDocument Document 
     { 
      get { return m_printPreviewControl.Document; } 
      set 
      { 
       m_printPreviewControl.Document = value; 
       m_printPreviewControl.InvalidatePreview(); 
      } 
     } 

     public MyPrintPreviewDialog() 
     { 
      InitializeComponent(); 

      m_printPreviewControl = new PrintPreviewControl(); 

      m_printPreviewControl.StartPage = 0; 
     } 

     private void MyPrintPreviewDialog_Load(object sender, EventArgs e) 
     { 
      m_printPreviewControl.Document.DefaultPageSettings = new PageSettings(); 
      m_printPreviewControl.Document.PrinterSettings = new PrinterSettings(); 

      m_printPreviewControl.InvalidatePreview(); 
     } 

    }//end MyPrintPreviewDialog class 

回答

2

我有點被這條線不解:

m_printPreviewControl = new PrintPreviewControl(); 

你不似乎附加或定位此控件。

如果你與設計師把它,這條線應該被刪除,您應該使用設計時處處控制的名字..

如果你想手動創建它,你需要至少ATR像this.Controls.Add(m_printPreviewControl);

+0

阿加,多麼愚蠢。這是從另一個測試遺留下來的。就像你說shoudl不在那裏。刪除它和所有的作品。第二雙眼睛通常都是需要的!乾杯。 – Kildareflare 2010-03-25 12:41:40