none
Wie kann ich Standard PrintPreviewToolStrip um weiteren Funktionen erweitern ? RRS feed

  • 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
    Sonntag, 9. Dezember 2012 16:47

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

    Montag, 10. Dezember 2012 17:36
    Moderator

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

    Sonntag, 9. Dezember 2012 19:04
    Moderator
  • Hallo,

    bitte um Sourcecode, denn ich habe die Schwirigkeit aus dem PrintPreview die PagesetupDialog aufzurufen ?

    MFG

    Montag, 10. Dezember 2012 16:28
  • 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

    Montag, 10. Dezember 2012 17:36
    Moderator
  • 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,
    Robert


    Robert 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.

    Donnerstag, 20. Dezember 2012 16:00
    Moderator