none
Problema - Vista Previa vb .net RRS feed

  • Pregunta

  • Hola! Tengo un pequeño problema a la hora de generar la Vista Previa del contenido de un tabcontrol.

    Si me Genera la vista previa, pero me muestra los elementos al reves.
    Por ejemplo:
    Tengo dos elementos, una picturebox y un Label. El label enfrente.



    Pero en la vista previa o imprimir, el label lo muestra al fondo.



    Una solucion era enviar el label al fondo, pero mi problema es que son mas de 20 elementos los que quiero mostrar.

    Codigo:
    'Boton de Vista Previa
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            PrintPreviewDialog1.Document = Me.PrintDocument1
            PrintPreviewDialog1.Document.DefaultPageSettings.Landscape = True
            PrintPreviewDialog1.ShowDialog()        
    End Sub
    
    'Genera Vista Previa del TabControl
    Private Sub PrintDocument1_PrintPage(sender As System.Object, e As  System.Drawing.Printing.PrintPageEventArgs) Handles  PrintDocument1.PrintPage
    
     Dim bmp As Bitmap = New Bitmap(Me.TabControl1.TabPages(0).Width, Me.TabControl1.TabPages(0).Height)
     Me.TabPage1.DrawToBitmap(bmp, New Rectangle(0, 0,Me.TabPage1.Width, Me.TabPage1.Height))
     Me.TabPage1.DrawToBitmap(bmp, TabPage1.Bounds)
     e.Graphics.DrawImage(bmp, 0, 0)
    
     bmp.Dispose()
    
    End Sub

    viernes, 15 de junio de 2012 15:16

Respuestas

  • Hola

    Segun en MSDN

    http://msdn.microsoft.com/es-es/library/system.windows.forms.control.drawtobitmap(v=vs.80).aspx

    Los controles dentro de contenedores se representan en orden inverso.

    E probado una cosa y en principio parece que funciona, prueba esto:

        Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    
            ' invertimos los controles
            Ordenar(Me.TabControl1.TabPages(0))
    
            Dim bmp As Bitmap = New Bitmap(Me.TabControl1.TabPages(0).Width, Me.TabControl1.TabPages(0).Height)
            Me.TabPage1.DrawToBitmap(bmp, New Rectangle(0, 0, Me.TabPage1.Width, Me.TabPage1.Height))
            Me.TabPage1.DrawToBitmap(bmp, TabPage1.Bounds)
            e.Graphics.DrawImage(bmp, 0, 0)
    
            bmp.Dispose()
    
            ' volvemos  invertir lo controles para dejarlos como estaban
            Ordenar(Me.TabControl1.TabPages(0))
    
        End Sub
    
        Private Sub Ordenar(ctl As Control)
    
            For Each i As Control In ctl.Controls
                i.BringToFront()
            Next
    
        End Sub
    En esta pagina creo que hablan de lo mismo
    http://social.msdn.microsoft.com/forums/en-US/winforms/thread/158c552c-92c3-4aa4-be10-08448741eb48/

    • Editado ToniAG viernes, 15 de junio de 2012 16:22
    • Marcado como respuesta DiegoCP9 viernes, 15 de junio de 2012 16:44
    viernes, 15 de junio de 2012 16:15

Todas las respuestas