Printpreview personnalisé

Description

L'origine de cette source vient du fait que je n'arrivais pas à faire apparaitre un PrintDialog après avoir instancié un PrintPreviewDialog au moment où je cliquais sur l'icône d'impression.
Au grès de mes recherches sur le web, je suis arrivé sur cette source http://www.codeproject.com/cs/miscctrl/SUPrintPreviewDialog.asp dont je me suis inspiré pour comprendre mon problème et réaliser cette source.
J'ai ajouté aussi la gestion du MouseWheel pour faire défiler les pages.

Source / Exemple :


using System;
using System.Reflection;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

namespace PrintPreview 
{
    
    /// <summary>
    /// Gestion de la barre d'icônes internes au PrintPreviewDialog
    /// Source inspirée de : http://www.codeproject.com/cs/miscctrl/SUPrintPreviewDialog.asp
	/// </summary>
	public class PrintPreview : System.Windows.Forms.PrintPreviewDialog
	{
        private ToolStripButton btnPrint;
        private NumericUpDown nudPageCounter;

        /// <summary>
        /// Constructeur permettant de gérer sa barre d'icônes
        /// </summary>
        public PrintPreview() : base()
        {
            // Récupération du type PrintPreviewDialog pour pouvoir utiliser System.Reflection
            Type t = typeof(PrintPreviewDialog);

            // Récupération des informations sur la barre d'icônes
            FieldInfo fi = t.GetField("toolStrip1", BindingFlags.Instance | BindingFlags.NonPublic);
            ToolStrip toolStrip = (ToolStrip)fi.GetValue(this);

            #region Impression
            // Récupération du bouton d'impression
            ToolStripButton printButton = (ToolStripButton)toolStrip.Items[0];
            // "Suppresion" de ce bouton
            printButton.Visible = false;
            // Création et ajout du nouveau bouton d'impression
            btnPrint = new ToolStripButton();
            btnPrint.ToolTipText = printButton.ToolTipText;
            btnPrint.ImageIndex = 0;
            toolStrip.Items.Insert(0, btnPrint);

            // Ajout de la gestion personnalisée du clic sur le nouveau bouton
            ((ToolStripButton)toolStrip.Items[0]).Click += new EventHandler(PrintPreview_Click);
            #endregion

            #region Défilement des pages
            // Récupération du NumericUpDown pour ajouter la gestion du MouseWheel
            fi = t.GetField("pageCounter", BindingFlags.Instance | BindingFlags.NonPublic);
            nudPageCounter = (NumericUpDown)fi.GetValue(this);

            // Ajout de la gestion personnalisée du MouseWheel
            this.MouseWheel += new MouseEventHandler(PrintPreview_MouseWheel);
            #endregion

        }

        /// <summary>
        /// Gestion du MouseWheel pour faire défiler les pages
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void PrintPreview_MouseWheel(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.Delta < 0)
                {
                    nudPageCounter.Value++;
                }
                else
                {
                    nudPageCounter.Value--;
                }
            }
            catch { }
        }

        /// <summary>
        /// Gestion du clic sur l'icône d'impression pour faire apparaitre une boite de dialogue pour les paramètres d'impression
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void PrintPreview_Click(object sender, EventArgs e)
        {
            // Instanciation du PrintDialog pour les préférences d'impression
            PrintDialog printDialog = new PrintDialog();
            printDialog.AllowCurrentPage = true;
            printDialog.AllowSelection = true;
            printDialog.AllowSomePages = true;
            printDialog.ShowNetwork = true;

            // Lancement de l'impression si validée par l'utilisateur
            if (printDialog.ShowDialog() == DialogResult.OK)
            {
                this.Document.PrinterSettings = printDialog.PrinterSettings;
                this.Document.Print();
            }
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            this.ClientSize = new System.Drawing.Size(582, 406);
            this.Name = "PrintPreview";
            this.ResumeLayout(false);
        }
	}
}

Conclusion :


J'espère que cette source sera utile pour d'autres personnes en tout cas elle m'aura permis de comprendre quelques notions sur le System.Reflection.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.