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

VB.NET Discussion :

Comment imprimer des données?


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 20
    Points
    20
    Par défaut Comment imprimer des données?
    Bonsoir à tous ce qui sont encore veille et bonne rêve à tous ce qui sont au lit.

    J'ai une forme qui contienne des TextBox (Infos sur un individu) et une photo. Je veux imprimer cette fiche personnel, j'ai suivi un exemple d'un cours publier su développez.com

    voici le 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles BtnImprimer.Click
     
     
            Dim Police As New Font("Arial", 11)
            Dim PoliceGras As New Font("Arial", 12, FontStyle.Bold)
            Dim XPos, YPos As Single
            Dim ChaineImpr As String
            Dim MiseEnPage As New PageSetupDialog
            Dim MonDoc As New Printing.PrintDocument
     
            With MiseEnPage
                .Document = MonDoc
                .AllowOrientation = False
                .AllowPaper = False
                .EnableMetric = True
                .MinMargins = New Printing.Margins(100, 100, 50, 50)
                .ShowDialog(Me)
                .Dispose()
            End With
     
            Using MyGraphics As Graphics = e.Graphics
     
                Dim Picture As New Bitmap(Me.PictureBox1.Image)
                MyGraphics.DrawImage(Picture, 2.0F * e.MarginBounds.Width / 3.0F, YPos)
                Dim SautLigne As Single = MyGraphics.MeasureString("X", PoliceGras).Height
                ChaineImpr = Me.TXTCIN.Text + " -- " + Me.TXTCNRPS.Text + " -- " + Me.TXTMutuel.Text
                MyGraphics.DrawString(ChaineImpr, PoliceGras, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 1.5F
     
                ChaineImpr = "Prenom : " + Me.TXTPreNomPers.Text
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 1.5F
     
                ChaineImpr = "Date de Recruttement : " + Me.TXTDateRecrutement.Text
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 3.0F
     
            End Using
     
        End Sub

    ça n'a pas marché. Il y a un message d'erreur qui apparait:

    ( System.InvalidCastException

    Unable to cast object of type 'System.Windows.Forms.MouseEventArgs' to type 'System.Drawing.Printing.PrintPageEventArgs'.
    )

    Je n'est rien compris à ce message, c'est pour cela que je cherche de l'aide.

    Merci à tous.

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Le problème vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles BtnImprimer.Click
    qui a remplacé le code normal soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnImprimer.Click
    De plus, le nom BtnImprimer_Click porte à confusion : comme l'argument est MouseEvent Arg et non pas EventArg, il doit s'agir d'un event genre MouseClick ou MouseDown.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre à l'essai
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Bonjour

    Merci Graffito de m'avoir répondu mais il me semble que VS2012 n'a pas accepter ce changement

    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
    Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnImprimer.Click
    
            Dim Police As New Font("Arial", 11)
            Dim PoliceGras As New Font("Arial", 12, FontStyle.Bold)
            Dim XPos, YPos As Single
            Dim ChaineImpr As String
            Dim MiseEnPage As New PageSetupDialog
            Dim MonDoc As New Printing.PrintDocument
    
            With MiseEnPage
                .Document = MonDoc
                .AllowOrientation = False
                .AllowPaper = False
                .EnableMetric = True
                .MinMargins = New Printing.Margins(100, 100, 50, 50)
                .ShowDialog(Me)
                .Dispose()
            End With
    
            Using MyGraphics As Graphics = e.Graphics
    
                Dim Picture As New Bitmap(Me.PictureBox1.Image)
                MyGraphics.DrawImage(Picture, 2.0F * e.MarginBounds.Width / 3.0F, YPos)
                Dim SautLigne As Single = MyGraphics.MeasureString("X", PoliceGras).Height
                ChaineImpr = Me.TXTCIN.Text + " -- " + Me.TXTCNRPS.Text + " -- " + Me.TXTMutuel.Text
                MyGraphics.DrawString(ChaineImpr, PoliceGras, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 1.5F
    
                ChaineImpr = "Prenom : " + Me.TXTPreNomPers.Text
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 1.5F
    
                ChaineImpr = "Date de Recruttement : " + Me.TXTDateRecrutement.Text
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 3.0F
    
            End Using
    
        End Sub
    Error 1 'Graphics' is not a member of 'System.Windows.Forms.MouseEventArgs'.

    Error 2 'MarginBounds' is not a member of 'System.Windows.Forms.MouseEventArgs'.


    C'est le message d'erreur.

    Merci pour tous.

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonjour MoMeBe,

    J'ai l'impression que vous ne comprenez pas du tout ce que vous essayez de faire. Programmer des applications sans comprendre ce que l'on fait en recopiant du code n'est pas une bonne solution. Ca donne rarement de bon résultat et ca vous fait perdre un temps énorme.

    Comme l'a fait remarquer Graffito, vous mélangez deux types d’évènement :
    • PrintDocument.PrintPage qui a le paramètre System.Drawing.Printing.PrintPageEventArgs
    • BtnImprimer.Click qui a le paramètre System.Windows.Forms.MouseEventArgs


    Du coup les erreurs déclenchées sont compréhensible car les méthodes que vous essayez d'appeler n'appartiennent pas à la variable e de type MouseEventArgs

    Dans votre cas il faudrait donc scinder votre méthode en deux méthodes (Code non testé adapté à la volée hors VS) :
    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
    Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnImprimer.Click
     
     
            Dim MiseEnPage As New PageSetupDialog
            Dim MonDoc As New Printing.PrintDocument
     
            With MiseEnPage
                .Document = MonDoc
                .AllowOrientation = False
                .AllowPaper = False
                .EnableMetric = True
                .MinMargins = New Printing.Margins(100, 100, 50, 50)
                .ShowDialog(Me)
                .Dispose()
            End With
     
            ' Tu attaches l'évenement PrintPage à ca méthode d'impression
            AddHandler MonDoc.PrintPage , addressOf MonDoc_PrintPage
            ' Tu appels la fonction Print qui va appeler PrintPage
            MonDoc.Print()
     
    End Sub
     
    ' C'est dans cette méthode qu'on imprime réellement.
    Private Sub MonDoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) 
            Dim Police As New Font("Arial", 11)
            Dim PoliceGras As New Font("Arial", 12, FontStyle.Bold)
            Dim XPos, YPos As Single
            Dim ChaineImpr As String
            Using MyGraphics As Graphics = e.Graphics
     
                Dim Picture As New Bitmap(Me.PictureBox1.Image)
                MyGraphics.DrawImage(Picture, 2.0F * e.MarginBounds.Width / 3.0F, YPos)
                Dim SautLigne As Single = MyGraphics.MeasureString("X", PoliceGras).Height
                ChaineImpr = Me.TXTCIN.Text + " -- " + Me.TXTCNRPS.Text + " -- " + Me.TXTMutuel.Text
                MyGraphics.DrawString(ChaineImpr, PoliceGras, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 1.5F
     
                ChaineImpr = "Prenom : " + Me.TXTPreNomPers.Text
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 1.5F
     
                ChaineImpr = "Date de Recruttement : " + Me.TXTDateRecrutement.Text
                MyGraphics.DrawString(ChaineImpr, Police, Brushes.Black, XPos, YPos)
                YPos = YPos + SautLigne * 3.0F
     
            End Using
     
        End Sub
    Quand tu utilises quelque chose que tu ne connais pas, va te renseigner dessus dans la documentation officiel : PrintDocument Class sur MSDN ( :Touche F1 quand tu es sur la fonction ou le type dans visual studio)
    Tu gagneras beaucoup de temps et de connaissance et dans cette page tu peux voir tout ce qui concerne le printPage, il y a même des exemples d'utilisations

  5. #5
    Membre à l'essai
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Salut Sankassss

    Merci pour ton aide. je viens juste de débuter en VS2012 (moi de 3 mois), j'ai fait des cours accélérer en Oracle 10g, C++, VB6 mais lorsque j'essaye avec Visual Studio 2012 c'est différent. J'ai un collègue qui développe en Assembleur, VB6, Visual Studio 2010 et il trouve maintenant quelque difficultés en VS2012.
    Beaucoup de choses dans VS2012 ont changés c'est pour cela que je vois flou, parfois je demande si j'avais des regrées d'avoir utiliser VS2012, mais nom il faut toujours progresser. En Bref
    Ton code marcher à 90% c.a.d une erreur s'oppose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles BtnImprimer.Click
    
            Dim MiseEnPage As New PageSetupDialog
            Dim MonDoc As New Printing.PrintDocument
    Le Message d'erreur

    Error 1 'Private Sub BtnImprimer_Click(sender As Object, e As System.Windows.Forms.MouseEventArgs)' has multiple definitions with identical signatures.

    Lorsque je change le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles BtnImprimer.Click
    
            Dim MiseEnPage As New PageSetupDialog
            Dim MonDoc As New Printing.PrintDocument
    le code marche , il imprime les données texte du personne mais pas sa photo.
    A la place du photo une zone de couleur Gris tous le long et sur la moitié droite de la feuille.

    Supporte mes bêtises un peu cher Ami et merci.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonojur,
    Citation Envoyé par MoMeBe Voir le message
    Le Message d'erreur

    Error 1 'Private Sub BtnImprimer_Click(sender As Object, e As System.Windows.Forms.MouseEventArgs)' has multiple definitions with identical signatures.

    Lorsque je change le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles BtnImprimer.Click
    Dans ton code tu as une autre définition de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Private Sub BtnImprimer_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles BtnImprimer.Click
    Il ne faut pas faire un copier/coller direct avec la définition mais placer le code que Sankassss t'a donné dans la définition de la procédure de ton bouton imprimer que tu as créé en double cliquant dessus.

    Donc placer ce bout 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
       Dim MiseEnPage As New PageSetupDialog
            Dim MonDoc As New Printing.PrintDocument
     
            With MiseEnPage
                .Document = MonDoc
                .AllowOrientation = False
                .AllowPaper = False
                .EnableMetric = True
                .MinMargins = New Printing.Margins(100, 100, 50, 50)
                .ShowDialog(Me)
                .Dispose()
            End With
     
            ' Tu attaches l'évenement PrintPage à ca méthode d'impression
            AddHandler MonDoc.PrintPage , addressOf MonDoc_PrintPage
            ' Tu appels la fonction Print qui va appeler PrintPage
            MonDoc.Print()
    dans la procédure créé par le double clic sur ton bouton BtnImprimer.

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Rien d'autre à dire concernant l'erreur que ce qu'a dit rv26t

    Supporte mes bêtises un peu cher Ami et merci.
    Ce ne sont pas des bêtises du moment que tu montres que l'aide que l'on t'apporte te sert et que tu évolues, c'est pour cela que j'essaye toujours de montrer comment se débrouiller seul

    Par contre concernant l'image, je ne vois pas, à première vue le code n'a pas l'air mauvais...

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonsoir,
    je pense que les dimensions de l'image d'origine sont x fois plus grandes que celles de la PictureBox.

    La propriété SizeMode de cette dernière doit être sur StretchImage ou équivalent pour y faire apparaitre l'image en entier au niveau du formulaire.

    Mais en impression, l'image est imprimée à sa grandeur réelle et on ne voit que son bord gauche sur la feuille.
    A tester : adapter la taille de l'image.

  9. #9
    Membre à l'essai
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 20
    Points
    20
    Par défaut
    Re bonjour

    Merci mes amis. Je croit que chrismonoye avait raison, la taille de l'image dépasse la taille de la feuille. Elle ne s'affiche pas. La propriété de PictureBox est sur StretchImage.
    le format des images est JPG.
    Je travail le jour et je programme la nuit donc je manque de sommeil pour terminer ce projet
    J'ai toujours besoin d'aide. Un Grand merci pour tous le monde.

Discussions similaires

  1. [Débutant] comment imprimer des données d'un datagridview ou listview?
    Par spring.time dans le forum VB.NET
    Réponses: 15
    Dernier message: 12/09/2012, 18h26
  2. Réponses: 11
    Dernier message: 01/08/2006, 05h15
  3. CFile : comment lire des données
    Par romeo9423 dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2004, 19h10
  4. Comment récuperer des données entrées au clavier?
    Par Elisée A. dans le forum MFC
    Réponses: 2
    Dernier message: 13/02/2004, 07h22
  5. Comment imprimer des tabulations ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/11/2002, 11h30

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