E.hasmorepages

Résolu
Repentignois Messages postés 14 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 23 octobre 2009 - 19 déc. 2008 à 14:57
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 - 19 déc. 2008 à 19:29
Je pioche depuis des heures sur le e.hasmorepages.  J'ai une procédure d'impression qui comprend deux pages mais la seconde s'imprime sur la première, ignorant le e.hasmorepages.  Voici un résumé de ma procédure en espérant que quelqu'un pourra m'éclairer.
PrivateSub PD_printpage(ByVal sender AsObject, ByVal e As System.Drawing.Printing.PrintPageEventArgs) _<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

    Handles PD.PrintPage

        e.HasMorePages = True

        Static i AsInteger

        Static NoPage AsInteger

        Call Imprime_Entete  ' Pour imprimer mon entête de page

        While NbrLignesGrille < TotalGrille And y < BasPage

            'Impression des données ici

            y = y + TableFont.height + 2

            NbrLignesGrille += 1 : i += 1

            If y > BasPage Then

                Call Fin_de_Page ' Pour imprimer mon bas de page

                e.HasMorePages = True

             ExitSub

            EndIf

        EndWhile

       Call  Fin_de_Page

        e.HasMorePages = False

  EndSub

6 réponses

Repentignois Messages postés 14 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 23 octobre 2009
19 déc. 2008 à 18:44
J'ai trouvé la solution mais je ne comprends toujours pas pourquoi cela ne fonctionnait pas. Je n'ai pas utilisé la boîte à outils pour ajouter un PrintDialog, un Printdocument. Jê les ai plutôt créés en code de la façon suivante ... Public Class impression<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 

   PrivateWithEvents PD AsNew PrintDocument

    PrivateWithEvents PDialog As PrintDialog

 ....

ensuite dans le LOAD j'ai écris le texte suivant :

PrivateSub Impression_Load(ByVal sender AsObject, ByVal e AsSystem.EventArgs) HandlesMe.Load

       
AddHandlerPD.PrintPage,  _  AddressOfMe.Printdocument_printpage
et bien cela ne fonctionnait pas correctement comme je l'ai mentionné.  D'utiliser la boîte à outils pour créer les objets a réglé le problème.  Après toutes les recherches que j'ai faites, j'espère que cela servira à quelqu'un ou que quelqu'un trouvera pourquoi ce que j'écrivais ne fonctionnait qu'à toutes les deux pages.

Mderci pour ton aide NHenri.  J'ai beaucoup apprécié
3
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
19 déc. 2008 à 19:29
Bonjour,

Clique alors sur le bouton "Réponse acceptée" sur le(s) message(s) utile(s).

Note : Préfère une boucle Do/Loop à While/Wend, c'est plus souple et plus commun.

3
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
19 déc. 2008 à 15:28
Bonjour,

Il faut que tu sorte de ta procédure, elle sera rappelée pour la 2ième page.

0
Repentignois Messages postés 14 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 23 octobre 2009
19 déc. 2008 à 16:13
Il me semble que je sorte de la procédure en écrivant :

e.hasmorepages = true
exit sub

Jde ne comprends pas comment je pourrais faire d'autre.  En essayant de générer plus de deux pages, je me rends compte que je sors de la procédure qu'à toutes les deux pages et que les pages impaires s'impriment toutes par dessus les pages pairs.

Est-ce que cela peut aider à trouver une solution ?

Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15116 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 9 mai 2024 159
19 déc. 2008 à 16:28
Bonjour,

J'ai un peu mieux regardé ton code :

e.HasMorePages = True
est présent 2 fois, il serais mieux de ne le mettre qu'une fois.

Tes 2 variables static, serais mieux en attribut privé à ta classe.

Tes Call, tu peux virer ce mot-clé, call est implicite en VB.NET :
Call Imprime_Entete
Call  Fin_de_Page

A la place de
Exit Sub
J'utiliserais
Exit Do

Passe en pas à pas pour voir si tu sort correctement.

0
Repentignois Messages postés 14 Date d'inscription vendredi 19 mai 2006 Statut Membre Dernière intervention 23 octobre 2009
19 déc. 2008 à 17:47
Désolé de revenir là-dessus mais dans le pas à pas, je sors bien de la procédure.  Le exit do ne peut pas fonctionner tandis que le exit while m'amène à e.hasmorepages = false.  J'ai épuré le code de la façons suivante mais toujours avec une page paire qui s'imprime sur une page impaire.,  Y a-t-il une autre solution ?PrivateSub PD_printpage(ByVal sender AsObject, ByVal e As System.Drawing.Printing.PrintPageEventArgs) _<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

    Handles PD.PrintPage

       Imprime_Entete  

        While NbrLignesGrille < TotalGrille And y < BasPage

            'Impression des données ici

            y = y + TableFont.height + 2

            NbrLignesGrille += 1 : i += 1

            If y > BasPage Then

                Call Fin_de_Page

                e.HasMorePages = True

             ExitSub

            EndIf

        EndWhile

       Call  Fin_de_Page

        e.HasMorePages = False

  EndSub
0
Rejoignez-nous