IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Imprimer le contenu de la form


Sujet :

C#

  1. #1
    Membre très actif
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut Imprimer le contenu de la form
    Bonjour tout le monde;

    je veux imprimer le contenu de ma form1 SVP comment faire ?

    Nom : Sans titre-1.jpg
Affichages : 1965
Taille : 23,0 Ko

    j'ai cherche sur google mais j'ai rien pigé donc je viens chez vous

    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93

  3. #3
    Membre très actif
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut
    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

  4. #4
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Par défaut
    comme vous n'avez pas de bouton sur votre form, le eventhandler ne servira pas à grand chose!
    quel est la version de votre framework?

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    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)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    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.

  7. #7
    Invité
    Invité(e)
    Par défaut
    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) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    puis ajouter un bouton et son click event :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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();
      }
    }
    et sur le printDocument PrintPage event, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 );
      }
    }
    remplacer cette impression d'une liste de strings par l'image avec par exemple e.Graphics.DrawImage().

  8. #8
    Invité
    Invité(e)
    Par défaut feature suggestion
    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



  9. #9
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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 exemple .vb complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    bon code...

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par anonyme Voir le message
    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
    apparemment c'était moi
    mais en regardant ton code je ne vois pas pourquoi j'aurais mis -1, et la plupart du temps j'exprime un point de vue inverse
    peut etre un missclick ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Invité
    Invité(e)
    Par défaut

  12. #12
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Re
    OUPS !!!
    Il y a un loupe ,jai envoye un code en vb...
    Voici le csharp equivalent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
     
            }
        }
    }
    Bon code...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Bonjour,

    Je déterre.

    Le code ci-dessus ne fonctionne pas : "printDocument1_PrintPage n'existe pas dans le contexte actuel."

  14. #14
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 914
    Par défaut
    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.

  15. #15
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 987
    Par défaut
    Citation Envoyé par babaOrhum Voir le message
    Bonjour,

    Je déterre.

    Le code ci-dessus ne fonctionne pas : "printDocument1_PrintPage n'existe pas dans le contexte actuel."
    Pouce vers le bas pour avoir déterré le sujet inutilement.
    Ce code fonctionne pour peu qu'on le copie correctement.
    La procédure en question est déclarée à la ligne 44.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    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é.

  17. #17
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 914
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     private   void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
    avec du code en dessous entre accolades, et ça ça devrait bien aider.

    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.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    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.

  19. #19
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 914
    Par défaut
    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.

  20. #20
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 914
    Par défaut
    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 ...

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/10/2014, 15h27
  2. imprimer le contenu d'une windows form
    Par quelq'un dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/01/2010, 20h32
  3. Imprimer le contenu d'une form
    Par olibara dans le forum C#
    Réponses: 7
    Dernier message: 18/05/2008, 21h04
  4. imprimer le contenu de l'écran
    Par ensi dans le forum C
    Réponses: 10
    Dernier message: 19/08/2003, 10h47
  5. Comment imprimer le contenu d'un TStringGrid
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/06/2002, 15h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo