la impresion. El listview para otro.
El listview lo dejo para otro.
Lo de imprimir, que me ha costao tela porque aquí nadie respondió a mis plegarias. Vengo de VB6 y utilizaba sin temor el Print y me di de bruces con el VB.Net.
Tendrás la opción de imprimir directamente o bien ver primero el resultado y después imprimir. Yo te pongo un ejmplo que me hice para futuras aplicaciones, solo has de cambiar lo que necesites.
Tienes que añadir al formulario lo siguiente (dejale el 1 que le añade a cada control el propio sistema, por ejemplo PrintDialog1):
-PrintDialog
-PrintDocument
-PrintPreviewDialog
-Button1 con el text =imprimir
-Button2 con el text=Preview
Variable:
en el Public Class Form1
Inherits System.Windows.Forms.Form
Public valor As Single
Public otrovalor As Single
Public dato1 As String
Public x As Single
Public y As Single
en Private Sub Form1_Load
valor = 1
x = 10
y = 10
en el Private Sub Button1_Click
Dim siono As Integer
siono = PrintDialog1.ShowDialog()
If siono = 1 Then
PrintDocument1.PrinterSettings.PrinterName = PrintDialog1.PrinterSettings.PrinterName
PrintDocument1.DefaultPageSettings.Landscape = True
PrintDocument1.Print()
Else
Exit Sub
End If
en el Private Sub Button2_Click
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.WindowState = FormWindowState.Maximized
PrintDocument1.DefaultPageSettings.Landscape = True
PrintPreviewDialog1.ShowDialog()
Ahora viene la madre del cordero. Importantisimo el e.HasMorePages = False, que le indica que ya no hay más páginas, por eso utilizo el preview ya que si cometes el error de no saber indicar este argumento, seguirá imprimiendo folios hasta que se jarte. Puedes hacer un preview y cuando veas que funciona pones el botón que no se vea y listo.
Según entiendo, el PrintDocument1_PrintPage se va llamando una y otra vez como un bucle hasta que le indiques que ha llegado la última página. Por eso, cada vez que quieres una pagina nueva indicas e.HasMorePages = True.
En mi ejemplo, dale primero al preview ya que en caso contrario te imprime 3 folios en apaisado.
A veces pongo variables publicas para realizar llamadas y cambiarle los valores desde otros formularios. También puede haber alguna que utilice dentro de otro formulario y no veas que utilizo en este, es cuestion de limpiar el codigo.
en el Private Sub PrintDocument1_PrintPage:
Dim pincel As New System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim fuente As New System.Drawing.Font("courier new", 12)
Dim dato2 As String
Dim dato3 As String
Dim cuenta As Single
Dim i As Single
cuenta = 0
dato1 = "primera linea" + vbCrLf
dato2 = "segunda linea" + vbCrLf
dato3 = "tercera linea" + vbCrLf
If valor = 1 Then
x = 10 ' x es la horizontal
y = 10 '
For i = 1 To 10
e.Graphics.PageUnit = GraphicsUnit.Millimeter
'x = x + 5 ' x es la horizontal
y = y + 5 ' y es la vertical
e.Graphics.DrawString(dato1, fuente, pincel, x, y)
'x = x + 5
y = y + 5
e.Graphics.DrawString(dato2, fuente, pincel, x, y)
'x = x + 5
y = y + 5
e.Graphics.DrawString(dato3, fuente, pincel, x, y)
Next
e.HasMorePages = True
valor = 2
Exit Sub
ElseIf valor = 2 Then
dato1 = Space(2) & "VENDEDOR" & Space(19) & "HABITACIONES" & Replace(Space(6), " ", "-") '& String(6, "-")
x = 10
y = 30
e.Graphics.DrawString(dato1, fuente, pincel, x, y)
e.HasMorePages = True
valor = 3
Exit Sub
Else
dato1 = Space(2) & "pagina3" & Space(19) & "HABITACIONES" & Replace(Space(6), " ", "-") & "prueba esto" & New String("-", 9)
x = 10
y = 50
e.Graphics.DrawString(dato1, fuente, pincel, x, y)
e.HasMorePages = False
valor = 1
End If