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);
}
}
}