miércoles, 29 de febrero de 2012

16 - Control PrintDialog

UTILIZAR EL CONTROL PRINTDIALOG

Para poder realizar este ejercicio de una forma óptima se necesita tener instalada una impresora en el equipo, si no se dispone de una se entregará el procedimiento de cómo llevar a cabo esta labor.

En este proyecto veremos un adelanto de cómo crear context menú, estos se verán en más detalle en el punto aplicaciones de menús.

- Crea un proyectos Windows, el cual llamaremos WinImprimir.

- Agregaremos al formulario un control TextBox, con el siguiente text por defecto “Hola como están todos”, quedando de la siguiente forma:




- Arrastraremos desde el cuadro de herramientas un control PrintDocument, el cual renombraremos prnDoc.

- Dentro de la sección general, de la clase definiremos las siguientes variables:

' crearemos un context menú

Public WithEvents mnu As New ContextMenu

Public WithEvents mnuItem1 As New MenuItem("Abrir")

Public WithEvents mnuItem2 As New MenuItem("Cerrar")

Public WithEvents mnuPrint As New MenuItem("&Imprimir")

- Crearemos el método que atenderá el evento clic del menuitem Imprimir, de la siguiente forma:

Private Sub mnuPrint_Clik(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuPrint.Click

Dim pdDlg As New PrintDialog

pdDlg.Document = prnDoc

If pdDlg.ShowDialog = Windows.Forms.DialogResult.OK Then

prnDoc.Print()

End If

End Sub

Es importante destacar que la atención de los eventos por un método se realiza asociando el método al evento con la clausula Handles y lyego el evento, en el método anterior se hace de la siguiente forma Handles mnuPrint.Click

- En el método que atiende el evento load del formulario definiremos las siguientes líneas de código:

' agregaremos los items al menú
mnu.MenuItems.Add(mnuItem1)
mnu.MenuItems.Add(mnuItem2)
mnu.MenuItems.Add(mnuPrint)

' asociaremos el context menú al textbox
Me.TextBox1.ContextMenu = mnu

Por último definiremos el método que atenderá el proceso de impresión siempre y cundo este sea OK, desde la interfaz de impresión (Al ejecutar la aplicación se podrá observar esto)

Private Sub prnDoc_PrintPage(ByVal sender As Object, _

ByVal e As System.Drawing.Printing.PrintPageEventArgs) _

Handles prnDoc.PrintPage

Dim Ypos As Integer = e.MarginBounds.Top

Dim Xpos As Integer = e.MarginBounds.Left

Dim fontComSans As New Font("Comic Sans", 12, FontStyle.Regular, GraphicsUnit.Point)

Dim brshSolBlk As New SolidBrush(Color.Black)

Dim strToPrint = Me.TextBox1.Text

e.Graphics.DrawString(strToPrint, fontComSans, brshSolBlk, Xpos, Ypos)

End Sub

Al ejecutar la aplicación se podrán observar las siguientes interfaces:


Seleccionar la opción imprimir que abrirá la siguiente interfaz:



Al presionar el botón Aceptar, el validador if definido confirmará si es ok o no, de ser ok, se continúa con el proceso de impresión:

Si no existe una impresora aparecerá el siguiente error, ya que no ha sido controlado:


Para controlar el error cuando no exista una impresora conectada al equipo haremos lo siguiente:

En el método que atiende el evento clic del menú Item Imprimir, realizaremos los siguientes cambios, agregando y en bloque try … catch.

Dim pdDlg As New PrintDialog

pdDlg.Document = prnDoc

If pdDlg.ShowDialog = Windows.Forms.DialogResult.OK Then

Try

prnDoc.Print()

Catch ex As System.Exception

MessageBox.Show(ex.Message)

End Try

End If

No hay comentarios: