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