Bonjour tout le monde;
je veux imprimer le contenu de ma form1 SVP comment faire ?
Pièce jointe 186099
j'ai cherche sur google mais j'ai rien pigé :( donc je viens chez vous
Merci d'avance
Version imprimable
Bonjour tout le monde;
je veux imprimer le contenu de ma form1 SVP comment faire ?
Pièce jointe 186099
j'ai cherche sur google mais j'ai rien pigé :( donc je viens chez vous
Merci d'avance
Tu dois utiliser cette classe : https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx
Merci pour votre reponse mais je jure que je n'ai pas pigé comment utilisé ce documentprint, j'ai déjà cherché et j'ai pas pigé, quand je colle ce code dans form1 LOAD ça marche pas :(
printButton.Click += new EventHandler(printButton_Click);
printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
il me faut quoi pour qu'il imprim tout le contenu dans ma form1, j'ai vraiment besoin d'aide merci d'avance
comme vous n'avez pas de bouton sur votre form, le eventhandler ne servira pas à grand chose!
quel est la version de votre framework?
problème dé débutant, on veut avoir un résultat rapidement donc on colle du code qu'on ne comprend pas, au lieu de perdre un peu de temps à apprendre ...
la classe printdocument permet d'imprimer comme on dessine en windows forms, on peut faire drawline, drawstring, drawellipse etc...
il te faut donc une instance de printdocument
cette classe n'est pas super intuitive, quand on lui demande d'imprimer il lève un event d'impression, et dans l'event on peut dessiner
normalement elle est utilisée pour des impressions brutes, on code ce qu'on veut
pour imprimer le form entier (c'est rarement intelligent*, mais pourquoi pas) il y a à mon avis des tas de solution pour le faire en quelques lignes de code sur le net ...
(edit : le 1er lien sur google avec "print form c#" c'est une source de microsoft : https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx)
* : en général on imprime quelque chose en utilisant les infos du form, mais avec une mise en page différente
l'impression d'un code barre ce n'est que des lignes (et pour les fainéants il y a des police de caractère permettant de le faire)
L'API d'impression peut se baser sur un Graphics.
Ça tombe bien, le code barre doit être dessiné dans un Graphics.
Il suffit donc de réutiliser ce dernier pour l'impression.
poser sur le concepteur visuel de form un printDialog, un printDocument, un pageSetupDialog et un printPreviewDialog tel que leurs propriétés du "form1.designer.cs (dérouler form1 dans l'explorateur de fichier et la région de code) :
puis ajouter un bouton et son click event :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // // printDialog // this.printDialog.Document = this.printDocument; this.printDialog.UseEXDialog = true; // // printDocument // this.printDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument_PrintPage); // // pageSetupDialog // this.pageSetupDialog.Document = this.printDocument; // // printPreviewDialog // this.printPreviewDialog.Document = this.printDocument; this.printPreviewDialog.Enabled = true; this.printPreviewDialog.Name = "printPreviewDialog"; this.printPreviewDialog.UseAntiAlias = true; this.printPreviewDialog.Visible = false;
et sur le printDocument PrintPage event, par exemple :Code:
1
2
3
4
5
6
7
8
9
10
11
12 private void buttonPrint_Click(object sender, EventArgs e) { Hide(); try { if ( printPreviewDialog.ShowDialog() == DialogResult.OK ) printDocument.Print(); } finally { Show(); } }
remplacer cette impression d'une liste de strings par l'image avec par exemple e.Graphics.DrawImage().Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 private void printDocument_PrintPage(object sender, PrintPageEventArgs e) { Font font1 = new Font("Arial", 12, FontStyle.Bold | FontStyle.Underline); Font font2 = new Font("Arial", 12, FontStyle.Regular); int x = 50, y = 50; string msg = "Impression d'un texte."; e.Graphics.DrawString(msg, font1, Brushes.Black, x, y); y = y + (int)( font1.Height * 3 ); foreach ( string s in items ) { e.Graphics.DrawString(s, font2, Brushes.Black, x, y); y = y + (int)( font2.Height * 1.5 ); } }
ce qui serait constructif et légitimement juste
c'est que ceux qui votent sur des posts
soient obligés de donner la raison
comme sur le site codeproject
surtout ceux qui sont négatifs
parce que là franchement
c'est pas constructif
c'est trop ridicule
de chez ridicule
:moinsser:
bonjour
Dropper un control button et un control PrintDocumt sur ton form ...
Ensuite selection PrintinDocument et click droit ->Proprieties...
Dans page proprietes cliquer icon evenement ->en regard de PrintPage double clck ce qui genere le code du sub
Ensuite le class Graphics est ton ami(Graphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, sz) fait une copie d'ecran de ton form dans un bitmap appellee memoryImage qui est imprime)Code:
1
2
3
4
5
6
7
8
9
10 Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage e.Graphics.PageScale = 1.0 e.Graphics.PageUnit = GraphicsUnit.Millimeter e.Graphics.DrawImage(memoryImage, 0, 0) End Sub
Code exemple .vb complet:
bon code...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Public Class Form1 Public Sub New() ' Cet appel est requis par le concepteur. InitializeComponent() ' Ajoutez une initialisation quelconque après l'appel InitializeComponent(). Me.WindowState = FormWindowState.Maximized End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click CaptureScreen() PrintDocument1.Print() End Sub Dim memoryImage As Bitmap Private Sub CaptureScreen() Dim myGraphics As Graphics = Me.CreateGraphics() Dim s As Size = Me.Size memoryImage = New Bitmap(s.Width, s.Height, myGraphics) Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage) memoryGraphics.CopyFromScreen(Me.Location.X, Me.Location.Y, 0, 0, s) End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage e.Graphics.PageScale = 1.0 e.Graphics.PageUnit = GraphicsUnit.Millimeter e.Graphics.DrawImage(memoryImage, 0, 0) End Sub End Class
:plusser:
Re
OUPS !!!
Il y a un loupe ,jai envoye un code en vb...
Voici le csharp equivalent :
Bon code...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 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; //using à rajouter using System.Drawing.Printing; namespace WinImprimerForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.WindowState = FormWindowState.Maximized; this.button1.Text = "Print Form"; this.button1.Click += new EventHandler(button1_Click); this.printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage); } void button1_Click(object sender, EventArgs e) { CaptureScreen(); printDocument1.Print(); } Bitmap memoryImage; private void CaptureScreen() { Graphics myGraphics = this.CreateGraphics(); Size s = this.Size; memoryImage = new Bitmap(s.Width, s.Height, myGraphics); Graphics memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s); } private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) { e.Graphics.PageScale = 1.0f; // echelle 1 mais on peut dimminuer ou augmenter e.Graphics.PageUnit = GraphicsUnit.Millimeter;//conversion des pixels en millimetre e.Graphics.DrawImage(memoryImage, 0,0); } } }
Bonjour,
Je déterre.
Le code ci-dessus ne fonctionne pas : "printDocument1_PrintPage n'existe pas dans le contexte actuel."
Bonjour,
Il y a quelques semaines (bon on va dire un paquet de semaines) j'ai eu l'occasion de jouer avec ça.
Ce qui est super c'est que c'est très rapide à coder.
Mais mon exemple ne couvrait pas tout l'écran, donc quand j'ai ajouté des données sur mon formulaire, pour qu'elles soient imprimées aussi, et autant que possible avec une mise en page correcte, je n'y ai pas coupé, il a fallu créer un état.
Ah d'ailleurs, il va falloir que je le refasse parce que côté sauvegarde je n'ai pas assuré ...
Le matos n'a pas prévenu bien longtemps à l'avance avant de lâcher il faut dire.
Bonjour,
Et pourtant je c/c le code et ça ne fonctionne pas : "printDocument1_PrintPage n'existe pas dans le contexte actuel."
Alors je dois mal m'y prendre j'en suis conscient mais j'ai cherché.
Vu depuis le forum, il reste à voir ce que tu as fait de la ligne 44.
Regarde le code cité par Mabrouki (message 12) : il y a effectivement à la ligne 44
avec du code en dessous entre accolades, et ça ça devrait bien aider.Code:private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
Il faut vérifier si tu as bien intégré ce code, sinon, si tu appelles une procédure sans donner son code, bien entendu, ça coince.
Bonjour
Oui j'ai bien c/c l'intégralité du code dont bien entendu la fonction printDocument1_PrintPage mais j'ai l'erreur donnée ci-avant.
Et donc, tu as cette erreur à la ligne 24 ?
Es-tu sûr de ne pas avoir commis de faute de frappe ?
Tu utilises quoi comme éditeur ?
À une époque il y avait plein d'erreurs de compilation parce que des développeurs utilisaient Word, et donc ils envoyaient au compilateur un fichier avec du texte formaté. Bien entendu le compilateur ne savait pas quoi en faire.
Si on veut utiliser Word pour ça (ce qui est une mauvaise idée), il faut s'astreindre à lui demander de sauvegarder en texte seul.
Je mentionne ça pour mémoire, mais c'est vrai que si c'était ça le problème le compilateur devrait te signaler plus d'erreurs que ça.
Alors "vu depuis le forum", c'est une perspective trop éloignée.
J'ai créé une application WinForms et collé le code de Mabrouki dedans.
J'ai bien entre autres une erreur à la ligne 24, et là il s'avère que c'est printDocument1 qui n'est pas déclaré, le message d'erreur est plutôt trompeur.
Je creuse un peu ...