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 :

[Visual Studio 2010] imprimer un panel par page


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut [Visual Studio 2010] imprimer un panel par page
    Bonjour à tous,
    Dans un Form, j'ai 4 panels placés les uns en dessous des autres.
    Ils mesurent chacun 950 x 1378px
    Chacun de ces panels contient différents éléments (label, picturebox, textbox etc ...).
    J'aimerai pouvoir imprimer ces panels chacun sur une page.
    Pour se faire, j'ai voulu utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            PrintForm1.PrintAction = Printing.PrintAction.PrintToPreview
            PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Top = 0
            PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Bottom = 0
            PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Left = 0
            PrintForm1.PrinterSettings.DefaultPageSettings.Margins.Right = 0
            PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.Scrollable)
    Malheureusement pour moi, seul la partie visible à l'écran apparait dans l'aperçu, soit environ la première moitié du 1er panel.
    Ma première question est donc : comment "forcer" l'impression d'un panel complet sur une page ?
    Et naturellement ma seconde question est : comment imprimer un panel par page ?

    Je pense qu'il me faudrait utiliser HasMorePages mais je ne vois absolument pas comment l'utiliser dans mon cas.

    Je vous remercie par avance pour vos réponses

  2. #2
    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

    Pour imprimer un control il faut le dessiner au préalable dans un bitmap...
    DrawToBitmap(bitmap, Control.ClientRectangle) est ton ami...

    voici un exemple de code qui récupère les panels du Form et les dessine un à un dans un List(Of Bitmap)...

    Les bitmaps du List(Of Bitmap) sont imprimés dans l'évent PrintDocument_PrintPage...
    code .vb :
    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
     
    Public Class Form1
     
        Private pnlImages As List(Of Bitmap)
        Private count As Integer
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            'recupere chaque panal du form et le dessine dans un bitmap
            'la liste de bitmap contient tous les panels
            pnlImages = New List(Of Bitmap)
            For Each ctl As Control In Me.Controls
                If TypeOf ctl Is Panel Then
                    Dim bmp As New Bitmap(ctl.Width, ctl.Height)
                    ctl.DrawToBitmap(bmp, ctl.ClientRectangle)
                    pnlImages.Add(bmp)
                End If
     
     
            Next
            'compteur de bitmap à imprimer
            count = 0
            PrintDialog1.Document = PrintDocument1
            If PrintDialog1.ShowDialog = DialogResult.OK Then
                PrintDocument1.Print()
            End If
        End Sub
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim gr As Graphics = e.Graphics
            Dim rect As Rectangle = e.PageBounds
            gr.DrawImage(pnlImages(count), rect)
            e.HasMorePages = count < pnlImages.Count - 1
            If e.HasMorePages Then
     
                count += 1
            End If
     
     
     
        End Sub
     
     
     
     
     
    End Class
    Bon code...

  3. #3
    Membre très actif
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Merci, j'essaye ça dès que possible

  4. #4
    Membre très actif
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    ça marche impec !
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur CS234 generé par visual studio 2010
    Par yangoua dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/07/2012, 22h46
  2. code pour imprimer un report sous visual studio 2010
    Par hocine dans le forum Visual Studio
    Réponses: 2
    Dernier message: 28/10/2011, 20h25
  3. Réponses: 0
    Dernier message: 23/08/2011, 15h12
  4. [SP2010]Deployer une master page via Visual Studio 2010
    Par tazamorte dans le forum Développement Sharepoint
    Réponses: 3
    Dernier message: 07/02/2011, 11h10
  5. Réponses: 8
    Dernier message: 30/08/2009, 10h19

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