Seitenumbruch im PrintDocument

JK_net

Erfahrenes Mitglied
Hallo!

Ich habe einen Text, der über 2 Seiten geht, leider weiß ich aber nicht, wie ich im PrintDocument einen Seitenumbruch machen kann.

Hat jemand so etwas schon mal gemacht?

Vielen Dank im Voraus!

MfG
Jens
 
Hallo Jens!

Das Drucken unter .NET ist immer ein "Gebastel"....
Wenn das Dokument mehrere Seiten hat, kannst du das so festlegen (natürlich in der "PrintPage" - Methode)
Code:
e.HasMorePages = true;
// Sprunganweisung zum Neustarten von "printDocument1_PrintPage"
return;

Damit wird die Methode ein wiederholt aufgerufen. Das kannst du z.B. in einer "for-Schleife" mit einer globalen Variable anwenden, so dass er beim nächsten Mal wieder am richtigen Ort weiterfährt...

Hast du alles auf Papier was du wolltest, kannst du die Druckseite so abschliessen:
Code:
e.Cancel = true;
 
Hallo!

Vielen Dank schon mal für die Antwort!

Leider funktioniert das Ganze noch nicht bei mir...
Ich habe mal meinen Code beigefügt:

Code:
 int i = 0; 
y = 100;
foreach (ListViewItem item in this.lvwFigures.Items)
{
if (i == 20)
{
// Seitenumbruch einfügen
e.HasMorePages = true;
return;
}
e.Graphics.DrawString(item.SubItems[0].Text, new Font("Arial", 11, FontStyle.Regular), Brushes.Black, 150, y + 100);
 
i++;
}

Ich hole mir die Daten aus einem ListView, und möchte jeweils 20 Zeilen auf einer Seite ausgeben und anschließend einen Seitenwechsel machen, und die nächsten 20 Zeilen ausgeben...

Ich würde mich freuen, wenn du mir behilflich sein könntest!

MfG
Jens
 
Hallo Jens!

Sorry dass es so lange gedauert hat! Bei
Code:
e.HasMorePages = true;
return;
wird die Printpage erneut aufgerufen. Das heisst deine Zählvariable wird wieder auf null gesetzt und mit der foreach - Schleife wieder von vorne begonnen; und das ganze wiederholt sich bis zum Absturz....

Ich würde das so umschreiben:
Code:
int i;

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
	int y = 100;
	int k = i;

	while (i == listView1.Items.Count)
	{
		e.Graphics.DrawString(listView1.Items[i].SubItems[0].Text, new Font("Arial", 11, FontStyle.Regular), Brushes.Black, 150, y + 100);

		if (i == k+20)
		{
			e.HasMorePages = true;
			return;
		}
	}
}
 

Neue Beiträge

Zurück