Как распечатать только табличку с табличкой и этикетку из оконной формы? - PullRequest
0 голосов
/ 19 ноября 2010

Я работаю над проектом chequePrinting с использованием windows-формы, где одно из моих требований - распечатать ваучер 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()

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

1 Ответ

2 голосов
/ 19 ноября 2010

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

Вместо этого вы можете просто создать изображение TableLayoutPanel (используя его DrawToBitmap метод ) и распечатайте это.Нет необходимости создавать 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 before должен работать с новым printImage в приведенном выше примере кода.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...