E.hasmorepages [Résolu]

Signaler
Messages postés
14
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
23 octobre 2009
-
Messages postés
14781
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 avril 2021
-
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
A voir également:

6 réponses

Messages postés
14
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
23 octobre 2009

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é
Messages postés
14781
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 avril 2021
154
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.

Messages postés
14781
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 avril 2021
154
Bonjour,

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

Messages postés
14
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
23 octobre 2009

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
Messages postés
14781
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 avril 2021
154
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.

Messages postés
14
Date d'inscription
vendredi 19 mai 2006
Statut
Membre
Dernière intervention
23 octobre 2009

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