2010-11-19 1 views
0

Я работаю chequePrinting проект с использованием оконной формы, где одним из моих требований является печать Check Receiving ваучера, нажав кнопку печати, но это дает мне распечатку из всей оконной формы вместо того, чтобы давать только белую часть следующего изображения ,Как распечатать только табличную панель и ярлык формы окна?

alt text

код, который я использую для обработчика предварительного просмотра событий является:

Graphics myGraphics = this.CreateGraphics(); 
     Size s = this.Size; 
     memoryImage = new Bitmap(s.Width, s.Height, myGraphics);// 
     Graphics memoryGraphics = Graphics.FromImage(memoryImage); 
     memoryGraphics.CopyFromScreen(label9.Location.X, label9.Location.Y, 52, 9, s); 
     printPreviewDialog1.Document = PrintDoc1; 
     PrintDoc1.PrintPage += printDocument2_PrintPage; 
     printPreviewDialog1.ShowDialog() 

Может кто-нибудь, пожалуйста, как я могу решить мою проблему?

+0

Я предполагаю из названия, что белая часть является 'TableLayoutPanel', и единственное, что вы хотите напечатать, это то, что, правильно? –

+0

Да, ты прав. Не могли бы вы рассказать мне, как я могу это сделать? – Dusk

ответ

2

Трудно сказать наверняка без остальной части кода, но похоже, что код, который вы опубликовали, создает изображение самой формы, а не TableLayoutPanel, которую вы хотите распечатать. Когда вы используете this keyword, он ссылается на текущий экземпляр класса, содержащего ваш код; предположительно это ваш Form, который не является тем, что вы хотите распечатать (но объясняет, почему он показывает все это).

Вместо этого вы можете просто создать изображение TableLayoutPanel (используя его DrawToBitmap method) и распечатать это. Нет необходимости создавать объект Graphics или указать точные координаты местоположения экрана, которое вы хотите скопировать. Например:

//Create a temporary image to draw into 
//with the dimensions of your TableLayoutPanel 
using (Bitmap printImage = new Bitmap(myTableLayoutPanel.Width, myTableLayoutPanel.Height)) 
    { 
     //Draw the TableLayoutPanel control to the temporary bitmap image 
     myTableLayoutPanel.DrawToBitmap(printImage, new Rectangle(0, 0, printImage.Width, printImage.Height)); 

     //(...your code continues here, except that now you 
     // will print the temporary image you just created) 
     printPreviewDialog1.Document = PrintDoc1; 
     PrintDoc1.PrintPage += printDocument2_PrintPage; 
     printPreviewDialog1.ShowDialog() 
    } 

Я не могу сказать от кода, который размещен, как именно вы передаете изображение, которое должно быть напечатано в вашем окне предварительного просмотра печати, но тем не менее вы получили его работы с memoryImage прежде, чем должен работайте с новым printImage в приведенном выше примере кода.

Обратите внимание, что метод DrawToBitmap не нарисует контроль ребенка TextBox если его свойство Visible устанавливается в False, и что ваши средства управления будут разыграны в обратном порядке. Вам нужно будет убедиться, что это внешний вид приемлемо для вашего приложения, но чаще всего это самый простой способ.

+0

Ну, спасибо, Коди! Работает. – Dusk

Смежные вопросы