2010-04-13 45 views
1

我試圖使用PageSetupDialog爲文檔設置打印頁面。PageSetupDialog沒有正確返回PageSize

在我打開對話框之前,文檔設置正確,頁面大小和頁面源也設置正確。 但是當選擇不同的紙張尺寸和紙張來源後,從對話框中返回時,紙張尺寸未正確反映,而紙張來源良好。 是的,我在按OK按鈕。

這個問題並不新鮮,但到目前爲止還沒有適當的答案。

PageSetupDialog dlgPageSetup = new PageSetupDialog(); 
    dlgPageSetup.Document = this.printDocument1; //this is fine, assume that. 
    dlgPageSetup.PageSettings.PaperSize = new PaperSize("My Custom", 1012, 800); 
    dlgPageSetup.PageSettings.PaperSource.SourceName = "Envelope"; 
    if (dlgPageSetup.ShowDialog(this) == DialogResult.OK) { 
     System.Diagnostics.Trace.WriteLine("DEBUG: " 
       + dlgPageSetup.PageSettings.PaperSize); 
     System.Diagnostics.Trace.WriteLine("DEBUG: " 
       + dlgPageSetup.PageSettings.PaperSource); 
    } 

我正在使用.Net 2.0,VS 2k5。

Link to original issue.

我還在猜測這是一個錯誤,其相關的自定義頁面大小。有沒有人得到解決這個問題?

+0

沒有人遇到過這個問題?我相信大部分應用程序都已完成打印頁面設置。 沒人? =) – Nayan 2010-04-13 18:45:46

+0

只有在調用PageSetupDialog之前將頁面大小設置爲自定義類型時才存在此問題。這是奇特的行爲,不容錯過。有沒有人找到過這個?!!?! – Nayan 2010-04-14 20:30:01

+0

有類似的問題。顯然曾經一度被記錄爲一個錯誤。 (https://connect.microsoft.com/VisualStudio/feedback/details/473597/pagesetupdialog-has-problem-with-paper-sizes)此刻嘗試解決此問題。 – 2010-05-11 15:31:36

回答

1

我工作圍繞這個問題是:

  1. 設置在pagesettings對話框爲(無)
  2. 重新創建打印文檔的文檔屬性,如果我看到它被設置爲自定義PageKind

因此,在我打開printsettings對話框之前,我檢查打印文檔的PageKind,如果需要重新創建,然後打開對話框。

if(printDocument1->DefaultPageSettings->PaperSize->Kind == 
    System::Drawing::Printing::PaperKind::Custom) 
{ 
    RecreatePrintDocument(); 
} 
pageSetupDialog1->PageSettings = printDocument1->DefaultPageSettings; 
pageSetupDialog1->PrinterSettings = printDocument1->PrinterSettings; 
Windows::Forms::DialogResult dresult = pageSetupDialog1->ShowDialog(); 

在RecreatePrintDocument()中,我創建了一個新的printdocument並指定了處理程序,類似的東西。

這不是一個很好的解決方案,因爲如果用戶選擇自定義頁面類型,我們只是忘記了頁面設置,但它是一開始。

+0

謝謝馬修!我會盡量在幾個小時內發佈結果。感謝您回答這個問題! =) – Nayan 2010-05-12 02:56:34

+0

馬修,這可能不起作用,或者我無法看到你在這裏描繪的東西。看看我的代碼http://social.msdn.microsoft.com/forums/en-US/winforms/thread/81bb2cea-8d47-4ddc-a174-14d6bc196de7/查看我的最後一篇文章。 – Nayan 2010-05-12 05:34:44

+0

你是對的,這不會解決你在最後一篇文章中重現的問題。如果我理解正確,那麼您試圖以編程方式將頁面設置對話框設置爲自定義紙張大小,並且我相信您知道這會打破對話框(對於隨後的所有紙張大小)。我在上面做的是確保我/永遠不會/以編程方式將頁面設置對話框設置爲自定義紙張大小(如果用戶這樣做,可以)。這意味着該對話框似乎會丟失其設置,但至少在後續選擇中不會中斷。你測試過了嗎?NET 4看看它是否還是壞了? – 2010-05-12 14:17:12