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