Je suis actuellement sur un projet, et dans ce projet il me faut faire une impression à partir d'un richTextBox.
J'ai donc utilisé:
-un PrintDocument renommé -> DocAImprimer
-un PrintDialog renommé -> ImprimerQCM
j'ai essayé de bricolé un truc avec tout sa, mais le souci c'est que je vois pas comment faire pour imprimer le contenue du richTextBox (j'arrive pas a dire que DocAImprimer dois être richTextBox.Text ou autre si il y a un truc pour gardé la mise en forme)
Il me semble, mais je dis peu etre une betise ( il est tard ) qu'il faut gerer l'evenement OnBeginPrint() ou OnPrintPage().
Regarde de ce cote. Voici un exemple de code :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ExemplePrintDocument
{
public partial class Form1 : Form
{
private string[] lines;
private int linesPrinted;
public Form1()
{
InitializeComponent();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
this.richTextBox1.Clear();
}
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
this.richTextBox1.SaveFile("txt.txt");
}
catch (Exception err)
{
MessageBox.Show(err.Message.ToString());
}
}
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
this.richTextBox1.LoadFile("txt.txt");
}
private void OnPrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int x = e.MarginBounds.Left;
int y = e.MarginBounds.Top;
while (linesPrinted < lines.Length)
{
e.Graphics.DrawString(lines[linesPrinted++], new Font("Arial", 10), Brushes.Black, x, y);
y += 15;
if (y >= e.MarginBounds.Bottom)
{
e.HasMorePages = true;
return;
}
}
linesPrinted = 0;
e.HasMorePages = false;
}
private void printToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.richTextBox1.SelectedText != "")
{
this.printDialog2.AllowSelection = true;
}
if (this.printDialog2.ShowDialog() == DialogResult.OK)
{
this.printDocument1.Print();
}
}
private void OnBeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
char[] param = { '\n' };
if (this.printDialog2.PrinterSettings.PrintRange == System.Drawing.Printing.PrintRange.Selection)
{
lines = this.richTextBox1.SelectedText.Split(param);
}
else
{
lines = this.richTextBox1.Text.Split(param);
}
int i = 0;
char[] trimParam = { '\r' };
foreach (string s in lines)
{
lines[i++] = s.TrimEnd(trimParam);
}
}
private void pageSetupToolStripMenuItem_Click(object sender, EventArgs e)
{
this.pageSetupDialog1.AllowPrinter = true;
this.pageSetupDialog1.ShowDialog();
}
private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e)
{
this.printPreviewDialog1.ShowDialog();
}
private void policeToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.fontDialog1.ShowDialog() == DialogResult.OK)
this.richTextBox1.Font = this.fontDialog1.Font;
}
private void OnApplyFontDialog(object sender, EventArgs e)
{
this.richTextBox1.Font = this.fontDialog1.Font;
}
private void colorToolStripMenuItem_Click(object sender, EventArgs e)
{
this.colorDialog1.ShowDialog();
}
}
}
Je ne sais plus si on doit gerer obligatoirement ces events ou si cetait juste pour nous faire pratiquer... Du moin le code fonctionne :). Jespere que cela pourra t'aider
Doum
[C#]Imprimer à partir d'un richBox
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.