Benutzer mit den meisten Antworten
Wie kann ich Standard PrintPreviewToolStrip um weiteren Funktionen erweitern ?

Frage
-
Hallo,
wie kann ich den Standard PrintPreview.ToolStrip (ToolStripLeiste, wo die BedienBottons stehen) um weiteren Buttons/Druckereigenschaften/Marginänderung/Nechst/Preview usw erweitern ?
Bitte um Beispiele.
MFG
- Bearbeitet ati.sah Montag, 10. Dezember 2012 06:54
Antworten
-
Hallo ati.sah,
Das ist nichtmal so schwer, sobald man die Prinzipien dahinter verstanden hat:
using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Printing; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private PrintDocument documentToPrint; private Font documentFont = new Font("Arial", 24); public Form1() { InitializeComponent(); InitializePageSetupDialog(); } private void InitializePageSetupDialog() { // Berechtigungen aktivieren pageSetupDialog1.AllowMargins = true; pageSetupDialog1.AllowOrientation = true; pageSetupDialog1.AllowPaper = true; pageSetupDialog1.AllowPrinter = true; // Metrisches System verwenden pageSetupDialog1.EnableMetric = true; } private void toolStripButtonSetupPageLayout_Click(object sender, EventArgs e) { // Preview aktualisieren if (pageSetupDialog1.ShowDialog() == DialogResult.OK) printPreviewControl1.InvalidatePreview(); } private void Form1_Load(object sender, EventArgs e) { // Dokument erstellen documentToPrint = new PrintDocument(); // Druck-Handler anbinden documentToPrint.PrintPage += OnPrintPage; // Dokument an PageSetupDialog anbinden pageSetupDialog1.Document = documentToPrint; pageSetupDialog1.PrinterSettings = documentToPrint.PrinterSettings; pageSetupDialog1.PageSettings = documentToPrint.DefaultPageSettings; // Document an PrintPreviewControl anbinden printPreviewControl1.Document = documentToPrint; } private void OnPrintPage(object sender, PrintPageEventArgs e) { e.Graphics.DrawString("Hallo Welt!", documentFont, Brushes.Black, e.MarginBounds); } private void toolStripButtonPrint_Click(object sender, EventArgs e) { documentToPrint.Print(); } } }
Wenn Du viel damit zu tun haben wirst, empfehle ich dir trotzdem ein Drittherstellercontrol anzuschaffen, oder zumindest sehr gründlich Chris Sells: Windows Forms Programming in C# zu lesen.
Gruß
Marcel
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 15:59
Alle Antworten
-
Hallo,
Hm. Was bitte schön ist ein PrintPreviewToolStrip? - Etwas mehr Mühe sollte man sich schon geben, wenn man eine Frage ins Forum stellt!
Wenn Du neue Schaltflächen dem PrintPreviewDialog hinzufügen möchtest, könntest Du das über Reflection erledigen (da das enthaltene ToolStrip als privat kennzeichnet ist und man deshalb nicht direkt darauf zugreifen kann). Das Ganze ist aber nicht der Mühe wert. Denn es gibt ja das PrintPreviewControl, dem Du ein ToolStrip ganz nach deinen Wünschen verpassen kannst.
Beide Steuerelemente haben eine Document-Eigenschaft, die Du auf ein vorhandenes PrintDocument setzen kannst. Das PrintDocument liefert dann über PrintDocument.PrinterSettings und PrintDocument.PageSettings seine eigenen Einstellungen mit. Am besten Du rufst noch bevor Du die Preview anzeigst das PageSetupDialog auf, um dem Benutzer die Möglichkeit zu geben, die Einstellungen zu ändern.
Wer an die Seitenvorschau aus Microsoft Word gewöhnt ist, dem kommt die Previewing-Technologie in Windows Forms ziemlich rudimentär vor. Wenn Du's mit deinem Projekt eilig hast, bessere Optik und Funktionalität brauchst und keine Zeit verlieren willst, schau dich doch bitte nach einem Dritthersteller-Steuerelement um, z.B. das von DevExpress.
Gruß
Marcel -
Hallo ati.sah,
Das ist nichtmal so schwer, sobald man die Prinzipien dahinter verstanden hat:
using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Printing; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private PrintDocument documentToPrint; private Font documentFont = new Font("Arial", 24); public Form1() { InitializeComponent(); InitializePageSetupDialog(); } private void InitializePageSetupDialog() { // Berechtigungen aktivieren pageSetupDialog1.AllowMargins = true; pageSetupDialog1.AllowOrientation = true; pageSetupDialog1.AllowPaper = true; pageSetupDialog1.AllowPrinter = true; // Metrisches System verwenden pageSetupDialog1.EnableMetric = true; } private void toolStripButtonSetupPageLayout_Click(object sender, EventArgs e) { // Preview aktualisieren if (pageSetupDialog1.ShowDialog() == DialogResult.OK) printPreviewControl1.InvalidatePreview(); } private void Form1_Load(object sender, EventArgs e) { // Dokument erstellen documentToPrint = new PrintDocument(); // Druck-Handler anbinden documentToPrint.PrintPage += OnPrintPage; // Dokument an PageSetupDialog anbinden pageSetupDialog1.Document = documentToPrint; pageSetupDialog1.PrinterSettings = documentToPrint.PrinterSettings; pageSetupDialog1.PageSettings = documentToPrint.DefaultPageSettings; // Document an PrintPreviewControl anbinden printPreviewControl1.Document = documentToPrint; } private void OnPrintPage(object sender, PrintPageEventArgs e) { e.Graphics.DrawString("Hallo Welt!", documentFont, Brushes.Black, e.MarginBounds); } private void toolStripButtonPrint_Click(object sender, EventArgs e) { documentToPrint.Print(); } } }
Wenn Du viel damit zu tun haben wirst, empfehle ich dir trotzdem ein Drittherstellercontrol anzuschaffen, oder zumindest sehr gründlich Chris Sells: Windows Forms Programming in C# zu lesen.
Gruß
Marcel
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 15:59
-
Hallo ati.sah,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.