2013-10-10 45 views
1

,因爲我的最後一個問題,我已經做了在C#中的印刷形式的一些更多的工作,我有這個代碼現在:要打印的形式在C#

public void printToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     Rectangle bounds = this.Bounds; 
     Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height); 

     Graphics g = Graphics.FromImage(bitmap);    
     g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);    


     PrintDocument doc = new PrintDocument(); 
     doc.PrintPage += this.Doc_PrintPage; 

     PrintDialog dlgSettings = new PrintDialog(); 
     dlgSettings.Document = doc; 

     if (dlgSettings.ShowDialog() == DialogResult.OK) 
     { 
      doc.Print(); 
     } 
    } 

    private void Doc_PrintPage(object sender, PrintPageEventArgs e) 
    { 

     float x = e.MarginBounds.Left; 
     float y = e.MarginBounds.Top; 

     e.Graphics.DrawImage(bitmap); 
    } 

哪裏printToolStripMenuItem_Click是打印按鈕。我知道我很接近,因爲我在編輯代碼以符合我的需求之前看到了打印對話框。現在,我得到一個錯誤,說「e.Graphics.DrawImage(位圖)」中的「位圖」;「在上下文中不存在。

我可以更改什麼來打印圖像?在嘗試創建打印文檔之前,我試圖打印屏幕圖像,因爲這看起來更容易,並且只是將其工作。我有時懶惰:P

注意:這是我的form2.cs文件中的所有代碼,我需要打印的表單。

謝謝:)

回答

1

你聲明位圖printToolStripMenuItem_Click但在Doc_PrintPage使用它。你需要通過某種方式。最簡單的方法是將其設爲實例變量(即在類中聲明它而不是方法,然後在printToolStripMenuItem_Click中分配它)。

public class SomeForm 
{ 
    private Bitmap bitmap; 
    public void printToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
    //... 
    bitmap = new Bitmap(bounds.Width, bounds.Height); 
    //... 
    } 
} 

您還缺少e.Graphics.DrawImage調用中的參數。您需要指定繪製圖像的位置。舉例來說,如果你想在左上角做:

e.Graphics.DrawImage(bitmap, new Point(0,0)); 
+0

否;對閉包使用匿名方法。 – SLaks

+1

這也可以,但你應該留下一個描述如何做的答案。我認爲最簡單的是最適合這個問題的。 –

+0

感謝您的模擬答案!我試過這個,但是我在'e.Graphics.DrawImage(bitmap)'這一行發生了一個錯誤;'說'沒有爲方法'DrawImage'重載1個參數' – Nathan

1

你應該使用匿名方法來創建內部你的函數的事件處理程序
這樣,它仍然能夠通過閉包的魔力來讀取本地變量。

doc.PrintPage += (s, e) => { 
    float x = e.MarginBounds.Left; 
    float y = e.MarginBounds.Top; 

    e.Graphics.DrawImage(bitmap); 
};