none
no entiendo printDoc.PrintPage RRS feed

  • Pregunta

  • Buenas, el caso es que imprimo unas 15 etiquetas para un producto y todo perfecto, luego selecciono otro producto y este tiene 9 etiquetas y me imprime 8, viene otro producto con 12 etiquetas y me imprime 10 y si sigo asi va disminuyendo.

    Sera que hay un buffer, por que inicializo las variable en cero cuando le doy click para otro grupo de etiquetas, o sera que printDoc.Print() tiene alguna propiedad o metodo que hay que inicializar o limpiar

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If ddlprinter.SelectedItem = "" Then
                MsgBox("Error Debe Seleccionar una Impresora")
                Exit Sub
            End If
            cuantos = 0
            count = 0
            printFont = New Font("Arial", 12)
            Dim Etiquetas As New PaperSize("etique73", 355, 100)
            printDoc.DefaultPageSettings.PaperSize = Etiquetas
            AddHandler printDoc.PrintPage, AddressOf print_PrintPage
            cuantos = DataGrid1.Rows.Count - 1
           printDoc.Print()

        End Sub

     Private Sub print_PrintPage(ByVal sender As Object, _

                                   ByVal e As PrintPageEventArgs)
             textnombre = DataGrid1.Rows(count).Cells("nombre").Value
            textapellido = DataGrid1.Rows(count).Cells("apellido").Value
            textdire = DataGrid1.Rows(count).Cells("direccion").Value
            textedo = DataGrid1.Rows(count).Cells("edo").Value
            textcod = DataGrid1.Rows(count).Cells("zipcod").Value
            e.Graphics.DrawString(Trim(textnombre), printFont, Brushes.Black, 5, 20)
            e.Graphics.DrawString(Trim(textapellido), printFont, Brushes.Black, 173, 20)
     
            e.Graphics.DrawString(Trim(textdire), printFont, Brushes.Black, 1, 39)
            e.Graphics.DrawString(Trim(textedo), printFont, Brushes.Black, 248, 39)
            e.Graphics.DrawString(Trim(textcod), printFont, Brushes.Black, 275, 39)
           
            If count < cuantos Then
                e.HasMorePages = True
                count += 1
                Return
            Else
                e.HasMorePages = False
              End If
        End Sub

    gracias

    lunes, 19 de marzo de 2012 20:12

Todas las respuestas

  • mmmm... considerando el contador como base 0 (cero)

    si el control DataGridView tiene 10 lineas, no restes al asignar a la variable "cuantos", así que cuantos sera 10

    ya en el metodo de imprimir... no coloques el sumador dentro de If dejalo antes

    count += 1
    If count < cuantos Then
        e.HasMorePages = True
    else
       e.HasMorePages = False
    End If

    así deberia de funcionar sin problema: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9  al llegar a 9 dejara de imprimir.


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    lunes, 19 de marzo de 2012 21:52
  • mmmm... considerando el contador como base 0 (cero)

    si el control DataGridView tiene 10 lineas, no restes al asignar a la variable "cuantos", así que cuantos sera 10

    ya en el metodo de imprimir... no coloques el sumador dentro de If dejalo antes

    count += 1
    If count < cuantos Then
        e.HasMorePages = True
    else
       e.HasMorePages = False
    End If

    así deberia de funcionar sin problema: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9  al llegar a 9 dejara de imprimir.


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    Gracias Marvin, pero ya esto lo hice y es el mismo problema, recuerda que la primera vez funciona de maravillas, si mando 20 paginas lo hace bien, pero el detalle esta despues de la primera vez, si mando las mismas 20 me inprime 19
    martes, 20 de marzo de 2012 11:35
  • si, es problema como menciona Luis que sea problema del donde creas el documento. intenta creando el documento en el boton que usas para imprimir.

    este es un pequeño ejemplo que he creado:

    Public Class Form1
    
        Private cuantas As Integer = 0
        Private impresas As Integer = 0
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    
            Me.impresas = 0
            Me.cuantas = Me.NumericUpDown1.Value
            Dim pd As New PrintDocument
            AddHandler pd.PrintPage, AddressOf pd_printPage
    
            Dim preview As New PrintPreviewDialog
            preview.Document = pd
            preview.ShowDialog()
            preview.Dispose()
    
        End Sub
    
        Private Sub pd_printPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
    
            e.Graphics.DrawString(Me.impresas.ToString(), Me.Font, Brushes.Black, 10, 10)
            Me.impresas += 1
            If Me.impresas < Me.cuantas Then
                e.HasMorePages = True
            Else
                e.HasMorePages = False
            End If
    
        End Sub
    End Class
    

    como veras... he creado un formulario al cual he agredo un boton y un control NumericUpDown para indicar la cantidad de paginas a imprimir.

    pruebalo para que veas como funciona... y si te funciona bien adaptalo a tu código...

    en espera de tus comentarios.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    martes, 20 de marzo de 2012 16:39
  • Gracias Marvin y Luis por la ayuda, pero ya funciono, el detalle era que esto tiene un orden como recomienda Marvin, una variable (count) que habia que inicializarla en el boton imprimir

    Gracias de nuevo

    miércoles, 21 de marzo de 2012 12:39