我從來沒有使用C#打印任何東西。我只是想知道標準的做法是什麼。在我的表單中,我有幾個列表框和幾個文本框。我想打印他們的內容,並在打印預覽中顯示它們,並在桌面上佈置漂亮的佈局。然後從他們我希望用戶能夠打印。打印C#中控件的內容?
在此先感謝!
我從來沒有使用C#打印任何東西。我只是想知道標準的做法是什麼。在我的表單中,我有幾個列表框和幾個文本框。我想打印他們的內容,並在打印預覽中顯示它們,並在桌面上佈置漂亮的佈局。然後從他們我希望用戶能夠打印。打印C#中控件的內容?
在此先感謝!
您將需要使用System.Drawing.Printing庫。您將使用PrintDocument.Print方法,您可以在MSDN Page with Example上找到
這是關於在C#中進行基本打印的nice little tutorial。它處理文本,但可以很容易地擴展繪製其他任何東西。
在C#中打印非常類似於C#中的自定義繪畫。最大的區別在於,座標系從屏幕表示中翻轉出來,並且必須考慮頁面的跨越(如果/必要的話)。您打印的方式也有點直觀,因爲您必須啓動打印過程然後處理頁面打印事件。
例子:
這裏是一個假設名爲listBox1中,在它的一些項目列表框控件存在打印事件處理程序的一個簡單的例子。它繪製每個項目以及圍繞它的一個盒子。
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Font font = new Font("Arial", 10f);
Graphics g = e.Graphics;
Pen rectPen = new Pen(Color.Black, 2f);
Brush brush = Brushes.Black;
// find widest width of items
for (int i=0; i<listBox1.Items.Count; i++)
if(maxItemWidth < (int)g.MeasureString(listBox1.Items[i].ToString(), font).Width)
maxItemWidth = (int)g.MeasureString(listBox1.Items[i].ToString(), font).Width;
// starting positions:
int itemHeight = (int)g.MeasureString("TEST", font).Height + 5;
int maxItemWidth = 0;
int xpos = 200;
int ypos = 200;
// print
for (int i = 0; i < listBox1.Items.Count; i++)
{
g.DrawRectangle(rectPen, xpos, ypos, maxItemWidth, itemHeight);
g.DrawString(listBox1.Items[i].ToString(), font, brush, xpos, ypos);
ypos += itemHeight;
}
e.HasMorePages = false;
}
應該明確處理'pen rectPen',還是GC處理? – jp2code 2011-04-28 13:47:18
GC不處理該問題。但這也不是一個很好的例子。代碼示例中的三個繪畫對象Font,Pen和Brush是我實際上在類作用域聲明的內容,而不是每次調用PrintPage處理函數時重新創建它們。我建議你在你的其他代碼中做同樣的事情。如果我記得你使用了圍繞筆和筆刷的陳述。這是矯枉過正,讓代碼更難閱讀。只需將這些對象移動到類範圍並讓它們存在於應用程序的整個生命週期中即可。 – 2011-04-28 14:06:47
我喜歡你提供的鏈接[可愛的小教程](http://www.codeproject.com/Articles/9282/Simplified-NET-Printing-in-C)。謝謝,相當好用! – Matt 2013-05-05 06:24:14
這種方法非常完美,因爲我已經將用戶信息保存到文本文件。謝謝! – 2009-11-05 21:24:35
當我按照您提供的MSDN鏈接收到「找不到內容」錯誤時。 – Matt 2013-05-05 06:20:42