+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 8 su 8

Discussione: VB2010 - Stampare su più fogli, senza sovrapporre il testo

  1. #1
    trystan non è in linea Novello
    Post
    31

    VB2010 - Stampare su più fogli, senza sovrapporre il testo

    Buongiorno a tutti,
    prendendo spunto dalla preziosa guida di Cippalippa "La stampa in VB.net: Come stampare senza CrystalReport", ho impostato la stampa del mio form (vb2010), apportando quasi tutte le dovute modifiche al codice.
    Dovrei stampare 7 pagine ciascuna col contenuto di 60 diverse textbox divise in 2 colonne (30x2) e intestazione e piè pagina comuni alle 7 pagine.
    La gestione del comando e.HasMorePages, non mi da problemi. Come le intestazioni a capo e piè pagina. Se faccio stampare solo la prima pagina (disattivando il resto del codice), tutto ok.

    Dovrei fare in modo che impostato il codice per le prime 60 textbox da stampare nella prima pagina, cominci poi a stampare dalla textbox61 nella seconda pagina, ma senza ridisegnare le precedenti:
    Questo è un estratto di quanto ho scritto:
    codice:
    ‘stampa prima pagina da textbox1 a textbox60
    str = TextBox1.Text                              ‘prima stringa da stampare in alto a sx
    e.Graphics.DrawString((str.PadLeft(3-Len(str))), Font4, Brushes.Black, 50, 280)
    ……………………………continua, ma riassumo :)
    str = TextBox60.Text                            ‘ultima stringa da stampare in basso a dx
    e.Graphics.DrawString((str.PadLeft(3-Len(str))), Font4, Brushes.Black, 500, 940)
    
     If stampa.textbox61.Text <> "" Then
     e.HasMorePages = True
    else
    e.HasMorePages = false
    
    
    ‘stampa seconda pagina da textbox61 a textbox120
    str = TextBox61.Text                              ‘prima stringa da stampare in alto a sx
    e.Graphics.DrawString((str.PadLeft(3-Len(str))), Font4, Brushes.Black, 50, 280)
    ……………………………
    str = TextBox120.Text                            ‘ultima stringa da stampare in basso a dx
    e.Graphics.DrawString((str.PadLeft(3-Len(str))), Font4, Brushes.Black, 500, 940)
    
     If stampa.textbox121.Text <> "" Then
     e.HasMorePages = True
    else
    e.HasMorePages = false
    e così via fino a pagina 7.
    Il problema è che in ogni pagina stampa i valori delle varie pagine, sovrapposti.
    Ho letto sul forum e in rete (msdn) del metodo printer.newpage, ma non riesco ad applicarlo...perchè non fa parte delle classi di vb2010
    Mentre Cippalippa sfrutta il valore i collegato al numero massimo di record del database che possono essere stampati per ogni pagina. Cosa potrei fare nel mio caso, per decidere io esattamente quando iniziare a stampare in una nuova pagina? Non credo mi servano calcoli di coordinate x,y perchè il cambio pagina devo impostarlo staticamente ogni 60 textbox, quindi l'altra guida di cippalippa sul multirighe e multipagina con l'uso di una richtextbox non mi è stata d'aiuto.

    Suggerimenti su come iniziare a stampare su una nuova pagina senza riscrivere le precedenti?
    Thanks,
    Trystan
    Ultima modifica di elisab; 11-02-2011 01:00 

  2. #2
    trystan non è in linea Novello
    Post
    31
    http://img19.imageshack.us/f/senzatitolo1uu.jpg

    L'errore che si verifica in stampa.

  3. #3
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,324
    Sposto nella sezione corretta. Per favore fai attenzione in futuro.
    Il regolamento del forum: la prima cosa da leggere.

  4. #4
    trystan non è in linea Novello
    Post
    31
    Scusami, non sapevo che Visual Basic 2010 = Visual Basic .NET anche quando non si interfaccia a database

  5. #5
    trystan non è in linea Novello
    Post
    31
    Ci sono riuscito con una semplice funzione select case e una textbox

  6. #6
    trystan non è in linea Novello
    Post
    31
    Quote Originariamente inviato da trystan Visualizza il messaggio
    Ci sono riuscito con una semplice funzione select case e una textbox
    codice:
     Private Sub Stampa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Stampa.Click   'Bottone per la stampa diretta verso al stampante
            If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 
                controllo.text = 1       'inserisco il valore "1" nel controllo che utilizzo per cambiare pagina
                PrintDocument1.Print()                                        
            Else                                                            
                Exit Sub                                                      
            End If
        End Sub
    
     Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    'qui inserisco tutte le dichiarazioni generali e le cose da stampare a capo e piè di ogni pagina 
    
    'Da questo punto in poi (dentro CASE) il corpo del testo che cambia per ogni pagina
      Select Case controllo.Text
                Case "1" 'avevo inserito 1 in click stampa
     e.Graphics.DrawString((TextBox1.Text), Font4, Brushes.Black, 50, 280) 'prima riga della prima colonna
     e.Graphics.DrawString((TextBox2.Text), Font4, Brushes.Black, 500, 280)'prima riga della seconda colonna 
    ......................
     e.HasMorePages = True 'impongo nel mio caso l'aggiunta di un'altra pagina
    controllo.text="2"    'questo mi fa stampare il secondo blocco di textbox nella pagina 2, senza riscrivere le prime
     Case "2"
    'come sopra ecc.....fino al caso 7
    Case "7"
    e.Graphics.DrawString((TextBox419.Text), Font4, Brushes.Black, 50, 280) 'ultima riga della prima colonna
     e.Graphics.DrawString((TextBox420.Text), Font4, Brushes.Black, 500, 280)'ultima riga della seconda colonna 
    ......................
      If controllo.Text = "9" Then 'metto come condizione positiva un caso che non si verifica mai 
                        e.HasMorePages = True
                    Else
                        e.HasMorePages = False 'quindi interrompe la stampa
                    End If
            End Select

  7. #7
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    4,530
    Non sarebbe meglio che tu postassi la tua soluzione anche in risposta al tutorial da cui sei partito?
    Potrebbe tornare utile a quelli che lo leggeranno.


  8. #8
    trystan non è in linea Novello
    Post
    31
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Non sarebbe meglio che tu postassi la tua soluzione anche in risposta al tutorial da cui sei partito?
    Potrebbe tornare utile a quelli che lo leggeranno.

    L'ho postata sopra, ma in forma ridotta...dici che devo postarla per esteso per tutte e 7 le pagine e con tutte e 420 textbox del codice? Allora aggiungo le prime 2 textbox per caso (nel case 7 ne metto 4), perchè se copio il codice per intero, come l'ho scritto per le 420 textbox, è troppo lungo, non si capisce più nulla e i mods mi picchiano ahaha.

    Chi volesse riutilizzare il codice deve aggiungere tutte le textbox che vuole, ognuna impostata: e.Graphics.DrawString((form.TextBox.Text), Font4, Brushes.Black, X, Y).

    codice:
    Private Sub Stampa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Stampa.Click   'Bottone per la stampa diretta verso al stampante
            If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 
                controllo.text = 1       'inserisco il valore "1" nel controllo che utilizzo per cambiare pagina
                PrintDocument1.Print()                                        
            Else                                                            
                Exit Sub                                                      
            End If
        End Sub
    
     Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    'qui inserisco tutte le dichiarazioni generali e le cose da stampare a capo e piè di ogni pagina 
            'DICHIARAZIONI GENERALI
            Dim Font1 As New Font("Arial Black", 18)                                        'Creo i font necessari
            Dim Font2 As New Font("Arial", 12, FontStyle.Bold)
            Dim Font3 As New Font("Arial", 12, FontStyle.Bold)
            Dim Font4 As New Font("Arial", 12)
         
            Dim str As String               'In questa variabile inserisco il valore della cella del dataset
    
    
            Static Pagina As Integer        'In questa registro il numero di pagina corrente
    
            '****************************************************************************************
    
            'INTESTAZIONE DEL DOCUMENTO le coppie di numeri sono coordinate x,y,x,y da leggere come da - a (per segmento)
    
            e.Graphics.DrawImage(Image.FromFile("C:\logo.jpg"), 50, 50, 350, 150)       'Se voglio rappresentare un'immagine. Per esempio il marchio della ditta
            e.Graphics.DrawString("PROVA MASTERDRIVE", Font1, Brushes.Black, 250, 100)      'Se voglio inserire una stringa con un testo
            e.Graphics.DrawLine(Pens.Red, 50, 220, 750, 220)                                'Per visualizzare un elemento grafico (linea orizzontale rossa)
           
    'Da questo punto in poi (dentro CASE) il corpo del testo che cambia per ogni pagina
      Select Case controllo.Text
                Case "1"                                                                             'avevo già inserito il valore controllo.text="1" in click stampa
     e.Graphics.DrawString((TextBox1.Text), Font4, Brushes.Black, 50, 280) 'prima riga, prima colonna
     e.Graphics.DrawString((TextBox2.Text), Font4, Brushes.Black, 500, 280)'prima riga, seconda colonna 
     e.HasMorePages = True                                                                  'impongo nel mio caso l'aggiunta di un'altra pagina
    controllo.text="2"                               'IMP. questo mi fa stampare il secondo blocco di textbox nella pagina 2, senza riscrivere le prime 60
     Case "2"
     e.Graphics.DrawString((TextBox61.Text), Font4, Brushes.Black, 50, 280) 'prima riga, prima colonna
     e.Graphics.DrawString((TextBox62.Text), Font4, Brushes.Black, 500, 280)'prima riga, seconda colonna 
    e.HasMorePages = True                                                                  'impongo nel mio caso l'aggiunta di un'altra pagina
    controllo.text="3"                              'IMP. questo mi fa stampare il secondo blocco di textbox nella pagina 3, senza riscrivere le prime 120
     Case "3"
     e.Graphics.DrawString((TextBox121.Text), Font4, Brushes.Black, 50, 280) 'prima riga, prima colonna
     e.Graphics.DrawString((TextBox122.Text), Font4, Brushes.Black, 500, 280)'prima riga, seconda colonna 
     e.HasMorePages = True                                                                  'impongo nel mio caso l'aggiunta di un'altra pagina
    controllo.text="4"                                   'IMP. questo mi fa stampare il secondo blocco di textbox nella pagina 4, senza riscrivere le prime 180
    Case "4"
     e.Graphics.DrawString((TextBox181.Text), Font4, Brushes.Black, 50, 280) 'prima riga, prima colonna
     e.Graphics.DrawString((TextBox182.Text), Font4, Brushes.Black, 500, 280)'prima riga, seconda colonna 
     e.HasMorePages = True                                                                  'impongo nel mio caso l'aggiunta di un'altra pagina
    controllo.text="5"                                    'IMP. questo mi fa stampare il secondo blocco di textbox nella pagina 5, senza riscrivere le prime 240
    Case "5"
     e.Graphics.DrawString((TextBox241.Text), Font4, Brushes.Black, 50, 280) 'prima riga, prima colonna
     e.Graphics.DrawString((TextBox242.Text), Font4, Brushes.Black, 500, 280)'prima riga, seconda colonna 
     e.HasMorePages = True                                                                  'impongo nel mio caso l'aggiunta di un'altra pagina
    controllo.text="6"                               'IMP. questo mi fa stampare il secondo blocco di textbox nella pagina 6, senza riscrivere le prime 300
    Case "6"
     e.Graphics.DrawString((TextBox301.Text), Font4, Brushes.Black, 50, 280) 'prima riga, prima colonna
     e.Graphics.DrawString((TextBox302.Text), Font4, Brushes.Black, 500, 280)'prima riga, seconda colonna 
     e.HasMorePages = True                                                                  'impongo nel mio caso l'aggiunta di un'altra pagina
    controllo.text="7"                             'IMP. questo mi fa stampare il secondo blocco di textbox nella pagina 7, senza riscrivere le prime 360
    
    Case "7"
     e.Graphics.DrawString((TextBox361.Text), Font4, Brushes.Black, 50, 280) 'prima riga, prima colonna
     e.Graphics.DrawString((TextBox362.Text), Font4, Brushes.Black, 500, 280)'prima riga, seconda colonna 
    e.Graphics.DrawString((TextBox419.Text), Font4, Brushes.Black, 50, 280) 'ultima riga della prima colonna
     e.Graphics.DrawString((TextBox420.Text), Font4, Brushes.Black, 500, 280)'ultima riga della seconda colonna 
                                       'stavolta non aggiungo il solito controllo.text
      If controllo.Text = "9" Then                                                           'metto come condizione positiva un caso che non si verifica mai 
                        e.HasMorePages = True
                    Else
                        e.HasMorePages = False 'quindi interrompe la stampa
                    End If
            End Select
     'PIE' DI PAGINA DEL DOCUMENTO
            e.Graphics.DrawLine(Pens.Red, 50, 1030, 750, 1030)                                'Per visualizzare un elemento grafico (linea rossa)
            Pagina += 1                                                                     'Incremento il numero di pagina
            e.Graphics.DrawString("Pagina " & Pagina, Font2, Brushes.Black, 600, 1050)
    end sub
    Ultima modifica di trystan; 04-02-2011 15:22 

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi