E.hasmorepages [Résolu]

Repentignois 14 Messages postés vendredi 19 mai 2006Date d'inscription 23 octobre 2009 Dernière intervention - 19 déc. 2008 à 14:57 - Dernière réponse : NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Repentignois 14 Messages postés vendredi 19 mai 2006Date d'inscription 23 octobre 2009 Dernière intervention - 19 déc. 2008 à 18:44
3
Merci
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é

Merci Repentignois 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de Repentignois
Meilleure réponse
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 19 déc. 2008 à 19:29
3
Merci
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.

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de NHenry
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 19 déc. 2008 à 15:28
0
Merci
Bonjour,

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

Commenter la réponse de NHenry
Repentignois 14 Messages postés vendredi 19 mai 2006Date d'inscription 23 octobre 2009 Dernière intervention - 19 déc. 2008 à 16:13
0
Merci
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
Commenter la réponse de Repentignois
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 19 déc. 2008 à 16:28
0
Merci
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.

Commenter la réponse de NHenry
Repentignois 14 Messages postés vendredi 19 mai 2006Date d'inscription 23 octobre 2009 Dernière intervention - 19 déc. 2008 à 17:47
0
Merci
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
Commenter la réponse de Repentignois

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.