cSharpArrow Ответов: 0

Функция drawImage в цикл for выводит последние изображения только


Я пытаюсь напечатать несколько QR-изображений на 1 странице, но когда я печатаю, я получаю только последнее изображение, код:

int QRLoop = Convert.ToInt32(txtSerialTo.Text) - Convert.ToInt32(txtSerialFrom.Text) + 1;
xx = 30;
yy = 0;
int x = 0;
for(int h = 0; h < QRLoop - 1; h++)
{
    p.PrintPage += delegate (object sender1, PrintPageEventArgs e1)
    {
        e1.Graphics.DrawImage(pbx[h].Image, xx, yy);
        e1.Graphics.DrawString((h + 1).ToString(), new System.Drawing.Font("Arial", 9, FontStyle.Bold), new SolidBrush(Color.Black), new RectangleF(xx + 45, yy + 5, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));
    };
    xx += 91;
    x++;
    if (x == 4)
    {
        x = 0;
        xx = 30;
        yy += 47;
    }
}
p.Print();


Пожалуйста, помогите!!!

Что я уже пробовал:

я пытался
PrintDocument[] p;
но я напечатал каждое изображение на одной странице по отдельности.

Richard MacCutchan

Возможно, это как - то связано со всеми теми делегатами, которых вы создаете.

cSharpArrow

у вас есть способ сделать это??

Richard MacCutchan

Извините, но я не понимаю, что на самом деле должен делать этот код. Мой комментарий был основан на том факте, что вы добавляете новый делегат в событие PrintPage каждый раз, когда он проходит цикл.

cSharpArrow

мне просто нужно настроить код, который я написал, чтобы печатать все изображения, созданные в цикле, на одной странице, моя проблема в том, что он печатает только последнее изображение..

Richard MacCutchan

Затем исправьте этот код, чтобы у него был только один делегат для печати.

cSharpArrow

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

п. В команде printpage += делегат (объект отправитель1, PrintPageEventArgs Е1)
{
e1.графика.DrawImage(АТС[0].Изображение, 30, 0);
e1.графика.DrawString ((1).ToString(), новая система.Рисование.Шрифт ("Arial", 9, FontStyle.Жирный шрифт), новая сплошная кисть(цвет.Black), new RectangleF(75, 5, p.DefaultPageSettings.PrintableArea.Ширина, p.DefaultPageSettings.PrintableArea.Высота));
};

п. В команде printpage += делегат (объект отправитель1, PrintPageEventArgs Е1)
{
e1.графика.DrawImage(АТС[1].Изображение, 121, 0);
e1.графика.DrawString ((1).ToString(), новая система.Рисование.Шрифт ("Arial", 9, FontStyle.Жирный шрифт), новая сплошная кисть(цвет.Black), new RectangleF(166, 5, p.DefaultPageSettings.PrintableArea.Ширина, p.DefaultPageSettings.PrintableArea.Высота));
};

п. В команде printpage += делегат (объект отправитель1, PrintPageEventArgs Е1)
{
e1.графика.DrawImage(АТС[2].Изображение, 212, 0);
e1.графика.DrawString ((1).ToString(), новая система.Рисование.Шрифт ("Arial", 9, FontStyle.Жирный шрифт), новая сплошная кисть(цвет.Black), new RectangleF(257, 5, p.DefaultPageSettings.PrintableArea.Ширина, p.DefaultPageSettings.PrintableArea.Высота));
};

п. В команде printpage += делегат (объект отправитель1, PrintPageEventArgs Е1)
{
e1.графика.DrawImage(АТС[3].Изображение, 303, 0);
e1.графика.DrawString ((1).ToString(), новая система.Рисование.Шрифт ("Arial", 9, FontStyle.Жирный шрифт), новая сплошная кисть(цвет.Black), new RectangleF(348, 5, p.DefaultPageSettings.PrintableArea.Ширина, p.DefaultPageSettings.PrintableArea.Высота));
};

п. Печать();

и я думаю, что цикл делает точно такие же шаги, не могли бы вы объяснить это, пожалуйста?

Richard MacCutchan

Нет, я не могу этого объяснить, потому что у меня нет способа запустить ваш код и отладить его. Это то, что вам придется сделать.

RickZeeland

А как вы заполняете АТС[ч].Такие изображения ?

cSharpArrow

for (int i = 0; i < QRLoop; i++)
{

int iSerial = конвертировать.ToInt32(txtSerialFrom.Text) + i;
строка QRString = iSerial.ToString() + "," + dtpDate.Ценность.ToShortDateString() + "," + JobNr + "," + Batch + "," + LineNr + "," + Model;
QRCodeGenerator qrGenerator = новый QRCodeGenerator();
QRCodeData qrCodeData = qrGenerator.CreateQrCode(QRString, QRCodeGenerator.ECCLevel.L, false, false, QRCodeGenerator.Экимод.По умолчанию -1);
QR-кода, QR-кода = новый QR-кода(qrCodeData);
Растровое изображение qrCodeImage = qrCode.GetGraphic(1);
АТС[i].Изображение = qrCode.GetGraphic(1);
}

0 Ответов