[C#] Eigener Druckerdialog erstellen

Drucken
( 0 Votes ) 
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 16.07.2012 Zuletzt aktualisiert am 17.07.2012 Geschrieben von Jonny132
Will man dem User die Möglichkeit bieten Inhalte komfortabel mit eigenen Einstellungen auszudrucken, so kann man einfach einen eigenen Dialog, in dem man diverse Einstellungen für den Drucker auswählen kann, programmieren.

In diesem Tutorial wird gezegt, wie man einen solchen Drucker - Dialogmit folgenden Einstellungsmöglichkeiten erstellt:
  • Drucker
  • (Seiten-) Format 
  • Exemplare
  • Schwarzweiss bzw. Farbe

Erstellt dazu eine neue Form mit 2 Comboboxen (Drucker und Formatauswahl), einer NumericUpDown (Exemplarauswahl), 2 RadioButtons (Farbauswahl) und 2 Buttons (Ok und Abbrechen) mit folgenden Form - Einstellungen:

  • Text - "Druckeroptionen"
  • FormBorderStyle - "FixedDialog"
  • MinimizeBox - "False"
  • MaximizeBox - "False"
  • AcceptButton - Ok-Button
  • CancelButton - Abbrechen-Button

Zu Schluss könnte euer Dialog in etwa folgendermaßen aussehen:
C# eigener Druckerdialog
 Kommen wir nun zum interessantem Teil des Dialoges. Die Programmierung.

Using:

using System.Drawing.Printing;
Um uns etwas Schreibarbeit zu ersparen binden wir den Namensraum System.Drawing.Printing per 'using' ein.

Properties und Konstruktor:
        private PrinterSettings m_SelectedSetting;

        public PrinterSettings SelectedSetting
        {
            get { return m_SelectedSetting; }
            set { m_SelectedSetting = value; }
        }

        public FrmSelectPrinter()
        {
            InitializeComponent();
            m_SelectedSetting = new PrinterSettings();
        }
Die vom Benutzer ausgewählten Drucker - Einstellungen werden von uns in der Eigenschaft 'SelectedSetting' vom Typ PrinterSettings gespeichert. Im Konstruktor erstellen wir eine neue Instanz der PrinterSettings - Klasse und haben somit automatisch die Default-Druckereigenschaften in dieser Eigenschaft.

Form - Load Ereignis:
        private void FrmPrinterOptions_Load(object sender, EventArgs e)
        {
            cbPrinter.DataSource = PrinterSettings.InstalledPrinters.Cast<string>().ToList<string>();
            cbPrinter.SelectedItem =  m_SelectedSetting.PrinterName;
            SetPrinter();
        }
Im Load - Ereignis der Form weisen wir zuerst der Combobox für die Druckerauswahl die zurzeit Installierten Drucker per DataSource zu. Da die Eigenschaft InstalledPrinters eine StringCollection ist, welche nicht als DataSource fungieren kann, müssen wir Sie per Linq in eine List<string> parsen.

Als SelectedItem der Combobox wählen wir den Standarddrucker aus welcher sich in unserer SelectedSettings-Eigenschaft befindet.

Am Ende des Load-Ereignisses wird noch die SetPrinter() - Funktion aufgerufen. Dazu nachher mehr.

SelectionChangeComitted - Ereignis der Druckerauswahl Combobox:
        private void cbPrinter_SelectionChangeCommitted(object sender, EventArgs e)
        {
            SetPrinter();
        }
Wird vom Benutzer ein anderer Drucker ausgewählt, so rufen wir wiederrum die SetPrinter() - Funktion auf.

SetPrinter() - Funktion:
        private void SetPrinter()
        {
            PaperSize currentSize = cbFormat.SelectedItem == null ? m_SelectedSetting.DefaultPageSettings.PaperSize : (PaperSize)cbFormat.SelectedItem;

            if (cbPrinter.SelectedItem != null)
            {
                cbFormat.DataSource = m_SelectedSetting.PaperSizes.Cast<PaperSize>().ToList<PaperSize>();
                cbFormat.DisplayMember = "PaperName";
                cbFormat.ValueMember = "PaperName";
            }

            cbFormat.SelectedValue = currentSize.PaperName;


            if (m_SelectedSetting.MaximumCopies < Convert.ToInt16(nudExemplare.Value))
            {
                nudExemplare.Maximum = Convert.ToDecimal(m_SelectedSetting.MaximumCopies);
                nudExemplare.Value = m_SelectedSetting.MaximumCopies;
            }

            if (m_SelectedSetting.DefaultPageSettings.Color)
                rbFarbe.Checked = true;
            else
                rbSW.Checked = true;
        }
In dieser Funktion aktualisieren wir die (Seiten-)Format - Combobox einträge, denn es gelten nicht für jeden Drucker die gleichen Größen. Dazu merken wir uns zuerst die aktuell ausgewählte Größe um sie später, falls sie existiert wieder zuweisen zu können.

Ist ein Drucker ausgewählt, so wird per DataSource die Format Combobox befüllt und SelectedValue gesetzt.

Auch das Maximum der NumericUpDown-Box wird wieder gesetzt.

Klick - Ereignis des Ok - Buttons:
        private void bnOk_Click(object sender, EventArgs e)
        {
            try
            {
                m_SelectedSetting.Copies = Convert.ToInt16(nudExemplare.Value);

                if (cbPrinter.SelectedItem != null)
                {
                    m_SelectedSetting.PrinterName = (string)cbPrinter.SelectedItem;
                }

                if (cbFormat.SelectedItem != null)
                {
                    m_SelectedSetting.DefaultPageSettings.PaperSize = (PaperSize)cbFormat.SelectedItem;
                }

                if (rbFarbe.Checked)
                    m_SelectedSetting.DefaultPageSettings.Color = true;
                else
                    m_SelectedSetting.DefaultPageSettings.Color = false;

                DialogResult = DialogResult.OK;
                Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
Hier werden die vom Benutzer getroffenen Einstellungen in unsere SelectedSettings-Eigenschaft gespeichert.
Das ganze setzten wir in einen Try-Catch Block um eventuelle Fehler abzufangen.

Aufruf unseres Dialoges:
            FrmSelectPrinter selPrinter = new FrmSelectPrinter();
            if (selPrinter.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                MessageBox.Show("Es wurde der Drucker '" + selPrinter.SelectedSetting.PrinterName +"' mit folgenden Einstellungen ausgewählt:" + Environment.NewLine +
                    "Papierformat: " + selPrinter.SelectedSetting.DefaultPageSettings.PaperSize.ToString() + Environment.NewLine +
                    "Exemplare: " + selPrinter.SelectedSetting.Copies.ToString() + Environment.NewLine +
                    "Farbeinstellung: " + (selPrinter.SelectedSetting.DefaultPageSettings.Color?"farbig":"schwarz/weiss"));
            }
Ergebnis der Druckerauswahl

Dies könnte ebenfalls interessant für Sie sein:
[C#] Screenshot von Form / Control erstellen und Drucken

 

    Veröffentlichen Sie ihre Kommentare ...