C# Sobrescribir la página anterior en la impresión

Buen día a todos, tengo una aplicación que crea un informe para el registro de tiempo diario de un empleado. El problema es que todas las páginas en el cuadro de diálogo de vista previa de impresión se sobrescribieron con todas las páginas disponibles en la impresión. ¿Cómo puedo solucionar este tipo de problema? El contenido de la página 1 es para la página 1, la página 2 es solo para la página 2 y viceversa. Aquí está mi código para imprimir:

    private void simpleButtonOk_Click(object sender, EventArgs e)
    {
        try
        {
            countPage = 0;
            CoolPrintPreviewDialog printPreview = new CoolPrintPreviewDialog();
            PrintDocument doc = new PrintDocument();
            doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
            printPreview.Document = doc;
            Form p = (Form)printPreview;
            p.WindowState = FormWindowState.Maximized;
            p.ShowDialog();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    void doc_PrintPage(object sender, PrintPageEventArgs e)
    {
        try
        {
            for (int i = 1; i <= countEmployee; i++)
            {
                Font fontName = new Font("Calibri", 12, FontStyle.Bold);
                Font fontPosition = new Font("Calibri", 12, FontStyle.Regular);
                Brush colorBrush = new SolidBrush(Color.Black);

                e.Graphics.DrawString(empName, fontName, colorBrush, new Point(80, 120));
                e.Graphics.DrawString(empPosition, fontPosition, colorBrush, new Point(80, 140));
                e.Graphics.DrawString(empId, fontPosition, colorBrush, new Point(680, 120));
                DataManipulation.PrintSelectEmployeeByMonth(i, e, comboBoxMonth, comboBoxYear, comboBoxDayFrom, comboBoxDayTo);
                countPage++;
                MessageBox.Show(countPage.ToString());
            }
            if (countPage <= countEmployee)
            {
                e.HasMorePages = true;
            }
            else
            {
                e.HasMorePages = false;
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

preguntado el 12 de junio de 12 a las 08:06

1 Respuestas

La PrintPage el evento se genera una vez para cada página; tu for loop sugiere que está intentando imprimir todas las páginas cada vez que se genera el evento.

Necesitas quitar el for bucle y promover la variable de índice i a una variable de nivel de instancia que puede usar para rastrear el número de página actual.

El resto de su código parece ser correcto; debe seguir solicitando más páginas hasta que se haya disparado el evento countEmployee veces.

Respondido el 12 de junio de 12 a las 09:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.