Трудно сказать наверняка без остальной части кода, но похоже, что код, который вы разместили, создает изображение самой формы, а не 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
и что ваши элементы управления будут отображаться в обратном порядке.Вам нужно убедиться, что его внешний вид приемлем для вашего приложения, но чаще всего это самый простой способ.