Hallo Leute,
es ärgerte mich, dass ich bei einem zweiseitigen Ausdruck initial immer nur die erste Seite angezeigt bekam.
So hab ich mal rumgehorcht und kann Euch folgenden Code präsentieren, bei dem der
Bekannt ist, dass im
Diese werden vom
Da dieses
1. Einfache Lösung bei bekannter Anzahl von Druckseiten:
2. Dynamische Lösung bei beliebiger Seitenanzahl:
Interessant wird es, wenn wir initial nicht wissen, wieviele Seiten ausgedruckt werden.
Da wir in diesem Falle auf die
Die Anzahl der Druckseiten geben wir mit einem
Dazu legen wir eine Instanz in die Klasse und updaten das
Spoiler anzeigen
Die Aufteilung auf Zeilen und Spalten ist dann jedem selbst überlassen, hier eine 3x3-Seiten-Vorschau:
Viel Spaß.
Preview n Pages.zip
es ärgerte mich, dass ich bei einem zweiseitigen Ausdruck initial immer nur die erste Seite angezeigt bekam.
So hab ich mal rumgehorcht und kann Euch folgenden Code präsentieren, bei dem der
PrintPreviewDialog
(in Grenzen) beliebig voreingestellt werden kann.Bekannt ist, dass im
PrintPreviewDialog
oben Buttons hat, die die Anzahl der dargestellten Seiten vorgeben:Diese werden vom
PrintPreviewControl
benutzt und die Anzeige wird entsprechend angepasst.Da dieses
PrintPreviewControl
eine Property vom PrintPreviewDialog
ist, haben wir hier den Zugang gefunden, unser Vorhaben zu realisieren.1. Einfache Lösung bei bekannter Anzahl von Druckseiten:
2. Dynamische Lösung bei beliebiger Seitenanzahl:
Interessant wird es, wenn wir initial nicht wissen, wieviele Seiten ausgedruckt werden.
Da wir in diesem Falle auf die
PrintPreviewDialog
-Instanz zugreifen müssen, können wir sie nicht in einem using
-Block verwenden.Die Anzahl der Druckseiten geben wir mit einem
NumericUpDown
-Control vor.Dazu legen wir eine Instanz in die Klasse und updaten das
PrintPreviewControl
im PrintPage
-Event:C#-Quellcode
- private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
- {
- this.nb++; // Seitennummer
- // ausgeben
- e.Graphics.DrawString(this.nb.ToString(), new Font("Arial", 200), Brushes.Black, new PointF(20, 20));
- // letzte Seite erkennen
- e.HasMorePages = (nb < this.numericUpDown1.Value);
- // PrintPreviewControl updaten
- switch (this.nb)
- {
- case 1:
- this.dialog.PrintPreviewControl.Columns = 1;
- this.dialog.PrintPreviewControl.Rows = 1;
- break;
- case 2:
- this.dialog.PrintPreviewControl.Columns = 2;
- this.dialog.PrintPreviewControl.Rows = 1;
- break;
- case 3:
- this.dialog.PrintPreviewControl.Columns = 3;
- this.dialog.PrintPreviewControl.Rows = 1;
- break;
- case 4:
- this.dialog.PrintPreviewControl.Columns = 2;
- this.dialog.PrintPreviewControl.Rows = 2;
- break;
- case 5:
- case 6:
- this.dialog.PrintPreviewControl.Columns = 3;
- this.dialog.PrintPreviewControl.Rows = 2;
- break;
- case 7:
- case 8:
- this.dialog.PrintPreviewControl.Columns = 4;
- this.dialog.PrintPreviewControl.Rows = 2;
- break;
- default:
- this.dialog.PrintPreviewControl.Columns = 5;
- this.dialog.PrintPreviewControl.Rows = 2;
- break;
- }
- }
Viel Spaß.
Preview n Pages.zip
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert!