我與PageSettings.PrintableArea的寬度和高度值有問題。 「寬度」,「高度」和「大小」屬性聲稱「獲取或設置」值。此外,inflate()函數聲稱根據傳入的值更改大小。C#中的PrintableArea - Bug?
但是,所有這些嘗試更改值都未奏效。 Inflate()忽略(沒有錯誤,只是通過就好像它的工作,但值保持不變。
試圖設置高度,寬度或大小給出的編譯器錯誤:「無法修改'系統的返回值.Drawing.Printing.PageSettings.PrintableArea」,因爲它不是一個變量」。
給我的感覺,這意味着‘或說明的設置’部分是一個謊言。
爲什麼我想知道這:(有人總是問......)我有一個打印應用程序(C#,WinForm),大多數情況下工作得很好,我可以設置打印機設置和頁面設置對象來控制打印對話框的打印機屬性中顯示的內容。然而,與Microsoft Office Document Image Writer一起,這些設置有時會被忽略,並且紙張大小即使在顯示其他內容時也會返回爲0,0。我所希望的只是所顯示的值都是所見即所得,所以我將紙張大小更改爲原來的大小,但可打印區域(如果出錯)會使得圖像不穩定。生成的圖像是可打印區域的大小,而不是紙張大小的值。只是想知道是否有這個原因或一種方法讓它不這樣做。
在此先感謝。 :)
UPDATE:
//ignored
PrintDocument.DefaultPageSettings.PrintableArea.Inflate(XOffset, YOffset);
//causes compiler error
PrintDocument.DefaultPageSettings.PrintableArea.Size = new SizeF((float)DimensionsPaperSize.Width, (float)DimensionsPaperSize.Height);
PrintDocument.DefaultPageSettings.PrintableArea.Height = DimensionsPaperSize.Height;
PrintDocument.DefaultPageSettings.PrintableArea.Width = DimensionsPaperSize.Width;
更新2:
對於我的(自定義大小)正確打印的打印機,當我改變了紙張大小的PrintableArea和PageBounds自動更改爲匹配。當我在MDIW上更改PaperSize時,只有PageBounds發生變化。我不明白是什麼原因造成的。
結論:
Nobugz做了一項偉大的工作,解釋爲什麼PrintableArea不能設置(和通常會永遠不需要)和爲什麼它的充氣()函數將被忽略,所以我標誌着作爲答案。
就促使我問這個問題的持續性問題而言,我仍然處於虧損狀態。爲了響應'ScaleTranform'建議,PaperSize和Graphics對象已經具有正確的值,因此與這些值混合可能不會有幫助。我懷疑我可以沿着這條路線做的最多的事情是將我正確大小的圖像調整爲我得到的PrintableArea的垃圾值。當我明確設置PaperSize無法相應地修改PrintableArea時,我將假定它是與bug相關的行爲。
令人沮喪的是,我似乎是唯一一個遇到過這個問題的人。至少,到目前爲止,我只觀察了MODIW的這種行爲。對於任何人的參考,所以儘可能多的信息在那裏;我正在運行32位Win7,在VS2008中開發。要複製這個問題的下列步驟操作:
PrintDialog PrintDlg = new PrintDialog();
PrintDocument PrintDoc = new PrintDocument();
PrintDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(DocumentPrintPage);
PrintDlg.PrinterSettings.PrinterName = printerName; //MODIW
PrintDoc = AlterPaperSize(PrintDoc); //A function that just changes the papersize
PrintDlg.Document = PrintDoc;
PrintDlg.PrinterSettings = PrintDoc.PrinterSettings;
if (PrintDlg.ShowDialog() == DialogResult.OK)
{
if ((PrintDoc.DefaultPageSettings.PaperSize.Width == 0) &&
(PrintDoc.DefaultPageSettings.PaperSize.Height == 0))
{
PrintDoc.DefaultPageSettings.PaperSize = DimensionsPaperSize;
}
PrintDoc.Print();
}
男人,這聽起來不錯,但整個「編譯器不夠聰明,注意到」的事情可能會使用一些澄清。編譯器如何不注意兩個值類型之間的差異? – 2010-04-07 21:08:02
@Mike:好的,在屬性上使用Inflate()方法時不會產生錯誤。副本被誇大了,但沒有分配給任何東西。這在技術上是有效的,膨脹方法可能有有用的副作用。雖然沒有。編譯器不知道它沒有有用的副作用。 – 2010-04-07 21:22:18
我明白了......我猜測我運氣不好,因爲我沒有注意到毛利在最終產品上有所改變。感謝您的詳細解答。 – Brandi 2010-04-07 21:47:59