C# Sobrescribir la página anterior en la impresión
Frecuentes
Visto 559 veces
0
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);
}
}
1 Respuestas
1
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 c# winforms reporting or haz tu propia pregunta.