Как следует из названия объекта args события ( PrintPageEventArgs ), этот обработчик события будет вызываться один раз для каждой страницы , которую вы собираетесь создать.Он будет вызываться снова для новой страницы, если для свойства HasMorePages установлено значение true.
В этом событии вы можете контролировать только то, что отображается на одной странице, поэтому текущий коднаписание всех изображений друг над другом (предположительно, все они имеют одинаковый размер, или самое большое - последнее, или вы уже заметили фрагменты более ранних изображений, отображаемых сбоку или внизу последнего изображения).
Таким образом, вы должны отслеживать, какое изображение вы хотите нарисовать, используя некоторые внешние поля.Например, у вас будет:
if (MyPrintDialog.ShowDialog() == DialogResult.OK)
{
currentPage = 0;
pd.Print();
}
А затем в вашем обработчике событий:
int currentPage;
private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs)
{
Graphics g = ppeArgs.Graphics;
Image objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString());
g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height);
currentPage++;
ppeArgs.HasMorePages = currentPage < lstAllOperatorloadImages.Count;
}
Чтобы напечатать два изображения на странице, я, вероятно, сделаю что-то вроде:
private void PrintImageHandler(object sender, PrintPageEventArgs ppeArgs)
{
Graphics g = ppeArgs.Graphics;
Image objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString());
g.DrawImage(objimage, 0, 0, objimage.Width, objimage.Height);
currentPage++;
if(currentPage < lstAllOperatorloadImages.Count)
{
objimage = Image.FromFile(lstAllOperatorloadImages[currentPage].ToString());
g.DrawImage(objimage, 0, 600, objimage.Width, objimage.Height);
currentPage++;
}
ppeArgs.HasMorePages = currentPage < lstAllOperatorloadImages.Count;
}