Бесконечный вывод листов в печать

На форме Winforms есть 4 spinedit. Первый отвечает за стартовое значение первого штрихкода, второй за количество штрихкодов на странице, третий должен отвечать за количество листов передающихся на печать, четвертый отвечает за количетво повторений одного штрихкода. Проблема в том что 3 spinedit работает некорректно. Если в нем стоит 1 то все нормально, одна страница и передается на печать, а если 2 и более начинается бесконечная подгрузка листов в предварительную печать. Мне нужно сделать так чтобы количество листов передающиеся на печать зависело от числа который находится в spinedit3:

    private void PrintDocument_PrintPage2(object sender, PrintPageEventArgs e)
    {
        Graphics g = e.Graphics;
        Font font = new Font("Arial", 12);

        int startX = 10;
        int startY = 10;
        int x = startX;
        int y = startY;

        int numPerRow = 7; // кол-во кодов в строке
        int rowsPerPage = 28; // кол-во строк на листе

        string todayString = DateTime.Today.ToString("ddMMyyyy");
        long startValue = long.Parse(todayString + spinEdit1.Value.ToString().PadLeft(4, '0'));

        int beginOfSeries = (int)spinEdit1.Value; // начало серии
        int lengthOfSeries = (int)spinEdit2.Value; // длина серии
        int numOfSheetCopies = (int)spinEdit3.Value; // кол-во страниц
        int numOfSameBarcodes = (int)spinEdit4.Value; // кол-во повторов ряда

        Pen pen = new Pen(Brushes.Black, 2)
        {
            DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
        };

        int currentPage = 1;

        for (int i = 0; i < numOfSheetCopies; i++) // цикл по страницам
        {
            int count = 0;
            for (int j = 0; j < numOfSameBarcodes; j++) // цикл повторов серий
            {
                for (int k = 0; k < lengthOfSeries; k++) // цикл серии
                {
                    if (count < numPerRow * rowsPerPage) // вмещается на странице?
                    {
                        string barcodeData = $"{DateTime.Today:ddMMyyyy}{beginOfSeries + k:0000}";

                        BarcodeWriter writer = new BarcodeWriter
                        {
                            Format = BarcodeFormat.CODE_128,
                            Options = new ZXing.Common.EncodingOptions { Width = 137, Height = 43 }
                        };
                        Bitmap barcodeImage = writer.Write(barcodeData);

                        g.DrawRectangle(pen, x, y, 133, 40);
                        int barcodeOffset = 4;
                        g.DrawImage(barcodeImage, x, y + barcodeOffset);

                        count++;

                        x += 110;
                        if (count % numPerRow == 0)
                        {
                            x = startX;
                            y += 40;
                        }

                    }
                }
            }
            if (i < numOfSheetCopies - 1) // проверка на наличие еще страниц
            {
                e.HasMorePages = true; // переход на следующую страницу
                currentPage++;
                y = startY;
                return;
            }
            else
            {
                e.HasMorePages = false; // последняя страница
                currentPage++;
                y = startY;
            }
        }
    }

Ответы (1 шт):

Автор решения: AlexanderSt

Вы увеличиваете счетчик currentPage, но нигде его не используете И в блоке

if (i < numOfSheetCopies - 1) // проверка на наличие еще страниц
        {
            e.HasMorePages = true; // переход на следующую страницу
            currentPage++;
            y = startY;
            return;
        }

что должно проверять условие? Количество оставшихся страниц для печати? Сейчас оно проверяет все ли копии текущей страницы напечатаны

→ Ссылка