+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 2 su 2

[VS 2008]PRO Non stampa più copie

  1. #1
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Ho uno strano problema che non riesco a venirne a capo.
    il problema è questo:
    in un ciclo For-next ho messo un controllo per il calcolo delle righe da stampare e quando viene superato
    il numero di righe da stampare deve effettuare la stampa su di un nuovo foglio ed in più deve effettuare anche
    la stampa di N copie;per intendersi,se in foglio A4 devo stampare un massimo di 25 righe e gli articoli da stampare
    sono, mettiamo 30,dopo che ha stampato 25 righe deve stampare su un altro foglio una volta finito deve ripetere il ciclo
    per le copie che ho richiesto,mettiamo 2 copie,ma non riesco a venirne a capo.
    posto il codice.
    Tralascio le dichiarazioni delle variabili ed ed altro codice in quanto ininfluente ai fini dell'analisi.

    dim zero as integer=0
    ----------------------------------------------------------------
        Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    
    For t = zero To righegrid ' righegrid è il totale delle righe del DataGridView
                nrpag += 1
                If nrpag > 3 Then    ' per brevità ho messo 3 giusto per vedere il comportamento
                    zero = t
                    pagina += 1
                    Str = "Pagina " & pagina & "/" & totpagine
                    e.Graphics.DrawString(Str, font1, Brushes.Black, articolix, 955)
                    e.HasMorePages = True
                    nrpag = 0
                    Exit For
                Else
                    nomeart = CStr(frmCreaddt.dtgArticolidastampa.Item(1, t).Value)
                    e.Graphics.DrawString(nomeart, font1, Brushes.Black, x, y) 'nome articolo
                    x = 280
                    rgs = CStr(frmCreaddt.dtgArticolidastampa.Item(3, t).Value)
                    displayRectangle = New Rectangle(New Point(x, y), New Size(60, 40))
                    e.Graphics.DrawString(rgs, font1, Brushes.Black, RectangleF.op_Implicit(displayRectangle), formato) 'colore
                    '  e.Graphics.DrawString(rgs, font1, Brushes.Black, x, y)
                    x = 440
                    rgs = CStr(frmCreaddt.dtgArticolidastampa.Item(4, t).Value)
                    displayRectangle = New Rectangle(New Point(x, y), New Size(60, 40))
                    e.Graphics.DrawString(rgs, font1, Brushes.Black, RectangleF.op_Implicit(displayRectangle), formato) 'partita
                    ' e.Graphics.DrawString(rgs, font1, Brushes.Black, x, y) ' partita
                    x = 600
                    quantita = CStr(frmCreaddt.dtgArticolidastampa.Item(2, t).Value)   ' quantità
                    e.Graphics.DrawString("Pz.", font1, Brushes.Black, x, y) 'quantità
                    x = 640
                    displayRectangle = New Rectangle(New Point(x, y), New Size(40, 40))
                    e.Graphics.DrawString(quantita, font1, Brushes.Black, RectangleF.op_Implicit(displayRectangle), formato) 'quantità
                    ' e.Graphics.DrawString("Pz." & quantita, font1, Brushes.Black, x, y)
                    x = articolix
                    y += 30
                End If
            Next
    
     copie += 1 ' questa è la variabile che contiene il valore delle copie da stampare
             If copie = Integer.Parse(txtCopie.Text) Then
            copie = 0
            e.HasMorePages = False
             Else
             zero = 0
              nrpag = 0
             e.HasMorePages = True
           End If
    
    quindi,se io ometto partendo dalla condizione di controllo if copie etc.etc fino all' end if la stampa viene effettuata correttamente,vale a dire se nrpag >3 stampa correttamente su un altro foglio fino alla fine del ciclo For,se invece
    non ometto la parte di codice che parte da copie+1 e la condizione di controllo delle copie,non solo non finisce di stampare tutto quello che c'è nel ciclo For e stampa fino alla condizione dove si verifica if nmrpag > 3 e non stampa sul foglio successivo ma non stampa neanche le copie che ho richiesto,stampa solo una copia.
    Non riesco a capire dove sbaglio.
    ℹ️ Leggi di più su sistemista ...

  2. #2
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Allora,ho risolto il problema.
    posto parte di codice che mi ha permesso la soluzione al mio problema.
    imposto una variabile a livello di Pubblic class
    Public Class frmStampa
    Dim copieDaStampare As Integer = 0 ' mi serve per controllo e per il calcolo
    ' inserisco dentro un Button la costante
    Private Sub btnConfermaStampa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConfermaStampa.Click
    
                righegrid = frmCreaddt.dtgArticolidastampa.RowCount - 2
                totpagine = CInt(Math.Ceiling(righegrid + 2) / 3)
                If totpagine = 0 Then
                    totpagine = 1
                End If
                copieDaStampare = totpagine * CInt(txtCopie.Text)
                PrintDocument1.Print()
                PrintDocument1.Dispose()
    End sub
        Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    
     For t = zero To righegrid
                nrpag += 1
                If nrpag > 3 Then
                    zero = t
                    pagina += 1
                    Str = "Pagina " & pagina & "/" & totpagine
                    e.Graphics.DrawString(Str, font1, Brushes.Black, articolix, 955)
                    e.HasMorePages = True
                    nrpag = 0
                    Exit For
                Else
    ' stampo quello che c'è da stampare
         End If
            Next
    'incremento la variabile copie
     copie += 1
    'controllo che copie sia minore dal totale delle CopieDaStampare e se è minore continuo la stampa
            If e.HasMorePages = False And copie < copieDaStampare Then
                zero = 0
                nrpag = 0
                e.HasMorePages = True
            End If
    End Sub
    End Class
    
    Problema Risolto.
    Ultima modifica di sistemista; 27-07-2014 11:15  Motivo: aggiunta una correzione
    ℹ️ Leggi di più su sistemista ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. [VS 2008 PRO]Stampa in Orizzontale
    Da sistemista nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 13-07-2014, 14:45
  2. Vs 2008: Reportviewer - Stampa a colori
    Da amanu86 nel forum Visual Basic .Net
    Risposte: 0
    Ultimo Post: 03-09-2012, 16:20
  3. [VB 2008 PRO] In fase di stampa non lampeggia la label.
    Da sistemista nel forum Visual Basic .Net
    Risposte: 8
    Ultimo Post: 27-01-2012, 23:02
  4. Stampa più copie dello stesso report
    Da seamission nel forum Microsoft Word
    Risposte: 18
    Ultimo Post: 22-05-2010, 19:58
  5. Problema - stampa 2 copie
    Da SirNino nel forum Visual Basic 6
    Risposte: 7
    Ultimo Post: 11-10-2007, 15:57