Tutorial Visual Basic

Embed Size (px)

Citation preview

Tutorial: Imprimir y configurar opciones de impresinIntroduccin Puede configurar opciones de impresin y llamar a una impresora mediante el cdigo, en lugar de mediante la UI de Crystal Reports. Para hacerlo, utilizar la clase PrintOptions y el mtodo PrintToPrinter() del modelo de objetos ReportDocument. Si el botn Imprimir de la barra de herramientas del control CrystalReportViewer satisface sus necesidades de impresin, no tendr que escribir cdigo para configurar opciones de impresin adicionales. Sin embargo, un mtodo basado en el cdigo para imprimir informes resulta til en casos especializados: Puede controlar cundo, dnde y cmo se realiza la impresin. Para hacerlo, deber desactivar el botn Imprimir de la barra de herramientas del control CrystalReportViewer y administra toda la impresin mediante cdigo.

y

y

Puede imprimir un informe en segundo plano, sin mostrarlo. Todas las opciones de configuracin de Imprimir las contiene el modelo ReportDocument, del que se puede crear una instancia y configurar sin mostrar nunca el informe con un control CrystalReportViewer.

y

Puede centralizar toda la impresin en el servidor Web de un cliente Web. Use el mtodo PrintToPrinter() para enviar tareas de impresin a una impresora conectada al servidor Web, en lugar de a una impresora local conectada al cliente Web.

Nota Esta funcionalidad de impresin de servidor no es tan amplia como el marco de trabajo de programacin de informes suministrado con Crystal Reports Server o BusinessObjects Enterprise. Para obtener ms informacin sobre estos productos, vea Opciones de actualizacin.Para empezar este tutorial, agregar varios controles de lista para configurar opciones de impresin sobre el control CrystalReportViewer en el formulario Web o para Windows. A continuacin, en la clase de cdigo subyacente, crear una constante de cadena CURRENT_PRINTER, a la que asignar la ruta de la impresora que desee usar. Despus, enlazar cada control de lista a una enumeracin que contiene opciones de impresin para la orientacin del papel, su tamao y la configuracin dplex de la impresora. Un control de lista adicional muestra la configuracin del origen del papel personalizado de la impresora designada actualmente en la constante CURRENT_PRINTER. Para el control del origen del papel personalizado, crear un mtodo auxiliar que genera una instancia de PrinterSettings, la asigna a la impresora actual y devuelve una seleccin de orgenes de papel para dicha impresora. A continuacin, crear un mtodo de evento de clic de botn para el botn Imprimir informe. En dicho mtodo de evento, a cada propiedad de opcin de impresin se le asignar un valor basado en las selecciones realizadas en los controles de lista. Finalmente, se imprimir el informe en la impresora designada en la constante CURRENT_PRINTER. Cdigo de ejemplo Este tutorial incluye cdigo de ejemplo de C# y Visual Basic que muestra la versin finalizada del proyecto. Siga las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de cdigo de ejemplo y trabajar con una versin finalizada.

El cdigo de ejemplo se almacena en carpetas que estn clasificadas por idioma y tipo de proyecto. Los nombres de las carpetas de cada versin del cdigo de ejemplo son los siguientes: Sitio Web en C#: CS_Web_RDObjMod_SetPrintOptions Proyecto para Windows en C#: CS_Win_RDObjMod_SetPrintOptions Sitio Web en Visual Basic: VB_Web_RDObjMod_SetPrintOptions Proyecto para Windows en Visual Basic: VB_Win_RDObjMod_SetPrintOptions

y y y y

Para localizar las carpetas que contienen estos ejemplos, vea Directorio del cdigo de ejemplo de los tutoriales.

Agregar controles de opciones de impresinEn esta seccin, agregar controles para mostrar varias opciones de impresin sobre el control CrystalReportViewer en el formulario Web o para Windows. Elija uno de los procedimientos con pasos siguientes (pero no ambos). Para agregar controles al formulario Web 1. Haga clic con el botn secundario en el formulario Web Forms en Explorador de soluciones y haga clic en Diseador de vistas. 2. 3. Haga clic en el control CrystalReportViewer para seleccionarlo. Presione la FLECHA IZQUIERDA de modo que aparezca un cursor parpadeante y, a continuacin, presione INTRO cinco veces. El control CrystalReportViewer bajar cinco lneas. 4. 5. En la primera lnea, escriba "Orientacin del papel". En el Cuadro de herramientas, arrastre un control DropDownList a la derecha del texto, hasta la primera lnea. 6. 7. En la segunda lnea, escriba "Tamao del papel". En el Cuadro de herramientas, arrastre un control DropDownList a la derecha del texto, hasta la segunda lnea. 8. 9. En la tercera lnea, escriba "Dplex de la impresora". En Cuadro de herramientas, arrastre un control DropDownList a la derecha del texto, hasta la tercera lnea. 10. En la cuarta lnea, escriba "Origen del papel". 11. En el Cuadro de herramientas, arrastre un control DropDownList a la derecha del texto, hasta la cuarta lnea. 12. En el Cuadro de herramientas, arrastre un control Button hasta la quinta lnea. 13. En el Cuadro de herramientas, arrastre un control Label a la derecha del control Button, hasta la quinta lnea. Contine con Configurar las propiedades de los controles de opciones de impresin.

Para agregar controles al formulario para Windows

Nota Este procedimiento slo funciona con un proyecto creado a partir de la Configuracin de proyectos. La configuracin de proyectos contiene referencias especficas a espacios de nombres y configuracin de cdigos necesarios para este procedimiento, que no se podr completar sin dicha configuracin. Por lo tanto, antes de empezar con este procedimiento, primero debe seguir los pasos de Configuracin de proyectos.Abra el formulario Windows Forms en la vista Diseo. Haga clic en el control CrystalReportViewer para seleccionarlo. En la ventana Propiedades, establezca Dock en "Bottom". Ajuste el tamao del formulario para Windows de modo que quede suficiente espacio por encima del control CrystalReportViewer para otros controles. 5. En el Cuadro de herramientas, arrastre un control Label hasta la parte superior izquierda del formulario Windows Forms. 6. 7. 8. En la ventana Propiedades, defina la propiedad Text del control Label como "Orientacin del papel". En el Cuadro de herramientas, arrastre un control ComboBox a la derecha del control Label. En el Cuadro de herramientas, arrastre un segundo control Label justo debajo del primer control Label. 9. En la ventana Propiedades, defina la propiedad Text del segundo control Label como "Tamao del papel". 10. En el Cuadro de herramientas, arrastre un control ComboBox a la derecha del segundo control Label. 11. En el Cuadro de herramientas, arrastre un tercer control Label justo debajo del segundo control Label. 12. En la ventana Propiedades, defina la propiedad Text del tercer control Label como "Dplex de la impresora". 13. En el Cuadro de herramientas, arrastre un control ComboBox a la derecha del tercer control Label. 14. En el Cuadro de herramientas, arrastre un cuarto control Label justo debajo del tercer control Label. 15. En la ventana Propiedades, defina la propiedad Text del quinto control Label como "Origen del papel". 16. En el Cuadro de herramientas, arrastre un control ComboBox a la derecha del cuarto control Label. 17. En el Cuadro de herramientas, arrastre un control Button justo debajo del cuarto control Label. 18. En el Cuadro de herramientas, arrastre un quinto control Label a la derecha del control Button.

1. 2. 3. 4.

Configurar las propiedades de los controles de opciones de impresinEn esta seccin, definir las propiedades de los controles de opciones de impresin en el formulario Web o para Windows. Para definir propiedades de los controles de opciones de impresin

1. 2. 3. 4. 5. 6. 7. 8. 9.

En la primera lnea, haga clic en el control DropDownList (ComboBox) para seleccionarlo. En la ventana Propiedades, defina la propiedad ID (Name) como "paperOrientationList". En la segunda lnea, haga clic en el control DropDownList (ComboBox) para seleccionarlo. En la ventana Propiedades, defina la propiedad ID (Name) como "paperSizeList". En la tercera lnea, haga clic en el control DropDownList (ComboBox) para seleccionarlo. En la ventana Propiedades, defina la propiedad ID (Name) como "printerDuplexList". En la cuarta lnea, haga clic en el control DropDownList (ComboBox) para seleccionarlo. En la ventana Propiedades, defina la propiedad ID (Name) como "paperSourceList". En la quinta lnea, haga clic en el control Button para seleccionarlo.

10. Desde la ventana Propiedades siga estos pasos:

y y

Defina la propiedad ID (Name) como "printReport". Establezca el valor de la propiedad Text en "Imprimir informe desde el servidor" (para un sitio Web) o "Imprimir informe" (para un proyecto para Windows).

Nota Quiz tenga que ajustar el tamao del control Button.11. En la quinta lnea, haga clic en el control Label para seleccionarlo. 12. Desde la ventana Propiedades siga estos pasos:

y y

Defina la propiedad ID (Name) como "message". Establezca el valor de la propiedad Text para que est vaca.

13. En el men Archivo, haga clic en Guardar todo.

Rellenar los controles de opciones de impresinEn esta seccin, rellenar los controles DropDownList (o ComboBox) en el formulario Web o para Windows. Para hacerlo, tendr que escribir cdigo en la clase de cdigo subyacente. La mayora de controles se rellenan con facilidad a partir de los valores de las enumeraciones de la impresora del espacio de nombres CrystalDecisions.Shared. Sin embargo, uno de estos controles, paperSourceList, se debe rellenar con orgenes de papel personalizados, que se basan en la impresora seleccionada actualmente. De este modo, el primer paso ser designar la impresora actual y. a continuacin, crear un mtodo auxiliar que genere un ArrayList de orgenes de papel personalizados a partir de dicha impresora. Contine con Recuperar el origen del papel seleccionado. Para crear el mtodo auxiliar GetPaperSources() 1. 2. 3. Abra el formulario Web Forms. En el men Ver, haga clic en Cdigo. En la parte superior de la clase, cree una constante de cadena para la ruta de red de la impresora.

Nota

En este ejemplo, se usa la ruta de la impresora "\\NetworkPrintServer2\\Printer15".4. Visual Basic

5. 6.Copiar cdigo

7. Private Const CURRENT_PRINTER As String = "\\NetworkPrintServer2\Printer15"8. C#

9. 10. Copiar cdigo11. private const string CURRENT_PRINTER = @"\\NetworPrinterServer2\Printer15";12. Encima de la clase, agregue un enunciado "Imports"[Visual Basic] o "using"[C#] para el espacio de nombres System.Collections. Visual Basic

Copiar cdigo

Imports System.CollectionsC#

Copiar cdigo

using System.Collections;13. En la parte inferior de la clase, cree el mtodo auxiliar GetPaperSources() que devuelve un ArrayList. Visual Basic

Copiar cdigo

Private Function GetPaperSources() As ArrayList End FunctionC#

Copiar cdigo

private ArrayList GetPaperSources() { }El resto del cdigo de este procedimiento con pasos utiliza el mtodo GetPaperSources(). 14. Dentro del mtodo, declare y cree una instancia de ArrayList. Visual Basic

Copiar cdigo

Dim myArrayList As ArrayList = New ArrayList()C#

Copiar cdigo

ArrayList arrayList = new ArrayList();15. Declare y cree una instancia de la clase PrinterSettings class a partir del espacio de nombres System.Drawing.Printing.

Nota Varias de las clases usadas en este tutorial tienen nombres recurrentes, en los espacios de nombres System.Drawing.Printing y CrystalDecisions.Shared. Cuando se usa una clase que tiene un nombre recurrente en el tutorial, el espacio de nombres completo precede al nombre de clase para evitar la ambigedad respecto a qu espacio de nombres pertenece.16. Visual Basic

17. 18. Copiar cdigo19. Dim myPrinterSettings As System.Drawing.Printing.PrinterSettings = New System.Drawing.Printing.PrinterSettings()20. C#

21. 22. Copiar cdigo23. System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();24. Defina la propiedad PrinterName de la instancia de PrinterSettings como la constante de cadena CURRENT_PRINTER.

Visual Basic

Copiar cdigo

myPrinterSettings.PrinterName = CURRENT_PRINTERC#

Copiar cdigo

printerSettings.PrinterName = CURRENT_PRINTER;25. Cree un bucle foreach que recorra cada instancia de PaperSource de la instancia de clase indizada de PaperSources. Visual Basic

Copiar cdigo

Dim myPaperSource As System.Drawing.Printing.PaperSource For Each myPaperSource As System.Drawing.Printing.PaperSource In myPrinterSettings.PaperSources NextC#

Copiar cdigo

foreach (System.Drawing.Printing.PaperSource paperSource in printerSettings.PaperSources) { }26. Dentro del bucle foreach, agregue la propiedad SourceName de la instancia de PaperSource a ArrayList. Visual Basic

Copiar cdigo

myArrayList.Add(myPaperSource.SourceName.ToString())C#

Copiar cdigo

arrayList.Add(paperSource.SourceName.ToString());27. Fuera del bucle foreach, devuelva el ArrayList desde el mtodo. Visual Basic

Copiar cdigo

Return myArrayListC#

Copiar cdigo

return arrayList;28. En el men Archivo, haga clic en Guardar todo. Para llenar los controles DropDownList Ahora, deber rellenar los tres primeros controles DropDownList con las enumeraciones del espacio de nombres CrystalDecisions.Shared. El cuarto control DropDownList se rellena con el mtodo GetPaperSources() recin creado. Abra el formulario Web Forms o Windows Forms. En el men Ver, haga clic en Diseador. Haga doble clic en un rea vaca del formulario. La pgina cambiar a la vista Cdigo y generar un mtodo de evento Page_Load() (para un formulario Web) o un mtodo de evento Form1_Load() (para un formulario para Windows). 4. Si est desarrollando un sitio Web, dentro del mtodo de evento Page_Load(), cree un bloque condicional Not IsPostBack. Visual Basic

1. 2. 3.

Copiar cdigo

If Not IsPostBack Then End IfC#

Copiar cdigo

if (!IsPostBack) { }Nota El bloque condicional Not IsPostBack encapsula el cdigo que slo se ejecuta la primera vez que se carga la pgina. Los controles se suelen enlazar a valores de datos dentro de bloques condicionales Not IsPostBack para que sus valores de datos (y los eventos de control subsiguientes) no se restablezcan cuando se vuelva a cargar la pgina.

5.

Las siguientes lneas de cdigo se colocan de forma diferente segn se trate de un proyecto para Windows o de un sitio Web: En los proyectos para Windows, las siguientes lneas de cdigo se deben colocar en el controlador de eventos Form_Load. En los sitios Web, las siguientes lneas de cdigo se deben anidar dentro del bloque condicional Not IsPostBack dentro del controlador de eventos Page_Load. c. Defina la propiedad DataSource de la instancia del control paperOrientationList con los valores de la enumeracin PaperOrientation. Visual Basic

y y

Copiar cdigo

paperOrientationList.DataSource = System.Enum.GetValues(GetType(PaperOrientation))C#

Copiar cdigo

paperOrientationList.DataSource = System.Enum.GetValues(typeof(PaperOrientation));

d.

Defina la propiedad DataSource de la instancia del control paperSizeList con los valores de la enumeracin PaperSize. Visual Basic

Copiar cdigo

paperSizeList.DataSource = System.Enum.GetValues(GetType(PaperSize))C#

Copiar cdigo

paperSizeList.DataSource = System.Enum.GetValues(typeof(PaperSize));e. Defina la propiedad DataSource de la instancia del control printerDuplexList con los valores de la enumeracin PrinterDuplex. Visual Basic

Copiar cdigo

printerDuplexList.DataSource = System.Enum.GetValues(GetType(PrinterDuplex))C#

Copiar cdigo

printerDuplexList.DataSource = System.Enum.GetValues(typeof(PrinterDuplex));f. Defina la propiedad DataSource de la instancia del control paperSourceList como el mtodo auxiliar GetPaperSources() creado en la seccin anterior. Visual Basic

Copiar cdigo

paperSourceList.DataSource = GetPaperSources()C#

Copiar cdigo

paperSourceList.DataSource = GetPaperSources();g. Finalmente, si est creando un sitio Web, realice una llamada al mtodo DataBind() para enlazar los valores de los cuatro controles DropDownList. Visual Basic

Copiar cdigo

DataBind()C#

Copiar cdigo

DataBind();

Recuperar el origen del papel seleccionadoEl control paperSourceList que agreg al formulario Web o para Windows muestra una lista de orgenes del papel personalizados, basada en la impresora seleccionada actualmente. Cuando el usuario final selecciona un origen del papel en el control paperSourceList en tiempo de ejecucin, este origen del papel seleccionado se debe aplicar a la propiedad CustomPaperSource del informe. Pero slo se pueden obtener dos tipos de valor posibles del control paperSourceList: El valor String del elemento seleccionado. El ndice Integer del elemento seleccionado.

y y

Ninguno de los dos tipos (String o Integer) es compatible con la propiedad CustomPaperSource. Slo se le puede asignar el tipo System.Drawing.Printing.PaperSource. As, en esta seccin crear un mtodo auxiliar, GetSelectedPaperSource(), que determina y devuelve la instancia de PaperSource correcta, basada en el ndice seleccionado del control paperSourceList.

Para hacerlo, el mtodo recorre la coleccin PaperSources de la impresora seleccionada actualmente y, a continuacin, compara la propiedad de cadena SourceName de la instancia de PaperSource con el valor de la cadena del elemento seleccionado. Si se encuentra un PaperSource coincidente, el mtodo devuelve la instancia de PaperSource. Para crear el mtodo GetSelectedPaperSource() 1. En la parte inferior de la clase, cree el mtodo auxiliar GetSelectedPaperSource() que devuelve una instancia de PaperSource. Visual Basic

Copiar cdigo

Private Function GetSelectedPaperSource() As System.Drawing.Printing.PaperSource End FunctionC#

Copiar cdigo

private System.Drawing.Printing.PaperSource GetSelectedPaperSource() { }El resto del cdigo de este procedimiento con pasos utiliza el mtodo GetSelectedPaperSource(). 2. Dentro del mtodo, declare y cree una instancia de la clase PaperSource a partir del espacio de nombres System.Drawing.Printing. Visual Basic

Copiar cdigo

Dim selectedPaperSource As System.Drawing.Printing.PaperSource = New System.Drawing.Printing.PaperSourceC#

Copiar cdigo

System.Drawing.Printing.PaperSource selectedPaperSource = new System.Drawing.Printing.PaperSource();3. Declare y cree una instancia de la clase PrinterSettings class a partir del espacio de nombres System.Drawing.Printing. Visual Basic

Copiar cdigo

Dim myPrinterSettings As System.Drawing.Printing.PrinterSettings = New System.Drawing.Printing.PrinterSettings()C#

Copiar cdigo

System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();4. Asigne la constante de cadena CURRENT_PRINTER a la propiedad PrinterName de la instancia de PrinterSettings. Visual Basic

Copiar cdigo

myPrinterSettings.PrinterName = CURRENT_PRINTERC#

Copiar cdigo

printerSettings.PrinterName = CURRENT_PRINTER;5. Cree un bucle foreach que recorra cada instancia de PaperSource de la instancia de clase indizada de PaperSources. Visual Basic

Copiar cdigo

For Each myPaperSource As System.Drawing.Printing.PaperSource In myPrinterSettings.PaperSources NextC#

Copiar cdigo

foreach (System.Drawing.Printing.PaperSource paperSource in printerSettings.PaperSources) { }6. Dentro del bucle foreach, agregue un bloque condicional que compruebe si la propiedad SourceName de la instancia de PaperSource coincide con el elemento seleccionado en el control paperSourceList.

Nota El nombre de dicho elemento seleccionado es diferente del control DropDownList de un sitio Web comparado con un control ComboBox de un proyecto para Windows. Realice las instrucciones apropiadas que se indican a continuacin.a. En un proyecto para Windows, cree el bloque condicional, que especifica el nombre del elemento seleccionado en el control paperSourceList como la propiedad SelectedText. Visual Basic

Copiar cdigo

If myPaperSource.SourceName = paperSourceList.SelectedText Then End IfC#

Copiar cdigo

if (paperSource.SourceName == paperSourceList.SelectedText) { }b. O, en un sitio Web, cree el bloque condicional, que especifica el nombre del elemento seleccionado en el control paperSourceList como la propiedad SelectedItem.Text. Visual Basic

Copiar cdigo

If myPaperSource.SourceName = paperSourceList.SelectedItem.Text Then End IfC#

Copiar cdigo

if (paperSource.SourceName == paperSourceList.SelectedItem.Text) { }7. Dentro del bloque condicional, asigne la instancia de PaperSource de la repeticin actual del bucle foreach a la instancia de selectedPaperSource que se declar en la parte superior del mtodo. Visual Basic

Copiar cdigo

selectedPaperSource = myPaperSourceC#

Copiar cdigo

selectedPaperSource = paperSource;

8.

Fuera del bloque condicional y del bucle foreach, devuelva la instancia de selectedPaperSource desde el mtodo. Visual Basic

Copiar cdigo

Return selectedPaperSource

Configurar las opciones de impresinEn esta seccin, aprender a crear el mtodo auxiliar SetPrintOptions(). En este mtodo, rellenar varias propiedades de la instancia PrintOptions. Algunas de estas propiedades se llenan directamente desde las selecciones de controles: una se asigna desde la constante de cadena CURRENT_PRINTER y a otra se le asigna el valor de devolucin del mtodo GetSelectedPaperSource(), que ha creado en la secci Para crear el mtodo SetPrintOptions() 1. En la parte inferior de la clase, cree el mtodo auxiliar SetPrintOptions(). Visual Basic

Copiar cdigo

Private Sub SetPrintOptions() End SubC#

Copiar cdigo

private void SetPrintOptions() { }El resto del cdigo de este procedimiento con pasos utiliza el mtodo SetPrintOptions(). 2. Dentro del mtodo, declare y cree una instancia de PrintOptions y, a continuacin, asgnela a la propiedad PrintOptions de la instancia del informe. Visual Basic

Copiar cdigo

Dim myPrintOptions As PrintOptions = hierarchicalGroupingReport.PrintOptionsC#

Copiar cdigo

PrintOptions printOptions = hierarchicalGroupingReport.PrintOptions;3. Defina la propiedad PrinterName de la instancia de PrintOptions como la constante de cadena CURRENT_PRINTER. Visual Basic

Copiar cdigo

myPrintOptions.PrinterName = CURRENT_PRINTERC#

Copiar cdigo

printOptions.PrinterName = CURRENT_PRINTER;4. Defina la propiedad PaperOrientation de la instancia de PrintOptions como la seleccin de enumeracin PaperOrientation que se obtiene del control paperOrientationList. Visual Basic

Copiar cdigo

myPrintOptions.PaperOrientation = CType(paperOrientationList.SelectedIndex, PaperOrientation)C#

Copiar cdigo

printOptions.PaperOrientation = (PaperOrientation)paperOrientationList.SelectedIndex;5. Defina la propiedad PaperSize de la instancia de PrintOptions como la seleccin de enumeracin PaperSize que se obtiene del control paperSizeList. Visual Basic

Copiar cdigo

myPrintOptions.PaperSize = CType(paperSizeList.SelectedIndex, PaperSize)C#

Copiar cdigo

printOptions.PaperSize = (PaperSize)paperSizeList.SelectedIndex;6. Defina la propiedad PrinterDuplex de la instancia de PrintOptions como la seleccin de enumeracin PrinterDuplex que se obtiene del control printerDuplexList. Visual Basic

Copiar cdigo

myPrintOptions.PrinterDuplex = CType(printerDuplexList.SelectedIndex, PrinterDuplex)C#

Copiar cdigo

printOptions.PrinterDuplex = (PrinterDuplex)printerDuplexList.SelectedIndex;

7.

Defina la propiedad CustomPaperSource de la instancia de PrintOptions como el mtodo auxiliar GetSelectedPaperSource() creado anteriormente. Visual Basic

Copiar cdigo

myPrintOptions.CustomPaperSource = GetSelectedPaperSource()C#

Copiar cdigo

printOptions.CustomPaperSource = GetSelectedPaperSource();

Configurar el mtodo de evento de clic del botn ImprimirEn esta seccin, aprender a crear el mtodo de evento de clic del botn Imprimir, a configurar opciones de impresin y a llamar a la tarea de impresin dentro de este evento. Para configurar el mtodo de evento de clic del botn Imprimir 1. 2. 3. Abra el formulario Web Forms o Windows Forms. En el men Ver, haga clic en Diseador. Haga doble clic en el control Button de printReport. Aparecer la clase de cdigo subyacente, en la que se ha generado automticamente el mtodo de evento redisplay_Click(). 4. Dentro del mtodo de evento printReport_Click(), llame al mtodo auxiliar SetPrintOptions() creado en la seccin anterior. Visual Basic

Copiar cdigo

SetPrintOptions()C#

Copiar cdigo

SetPrintOptions();5. Cree un bloque try/catch. Visual Basic

Copiar cdigo

Try Catch ex As Exception End TryC#

Copiar cdigo

try { } catch (Exception ex) { }6. Dentro del bloque try, llame al mtodo PrintToPrinter() para imprimir una copia no intercalada de la pgina 1 a la 99. Visual Basic

Copiar cdigo

hierarchicalGroupingReport.PrintToPrinter(1, False, 1, 99)C#

Copiar cdigo

hierarchicalGroupingReport.PrintToPrinter(1, false, 1, 99);

7.

An dentro del bloque try, defina la propiedad Text de la instancia de Label del mensaje como la constante de cadena MessageConstants.SUCCESS.

Nota La clase MessageConstants la cre durante Configuracin de proyectos. Si no lo hizo, deber crear esta clase antes de continuar. Vea Agregar una clase para mensajes de error.8. Visual Basic

9. 10. Copiar cdigo11. message.Text = MessageConstants.SUCCESS12. C#

13. 14. Copiar cdigo15. message.Text = MessageConstants.SUCCESS;16. Dentro del bloque catch, defina la propiedad Text de la instancia de Label del mensaje como la constante de cadena MessageConstants.FAILURE. Agrguele la propiedad Message de la instancia de Exception. Visual Basic

Copiar cdigo

message.Text = MessageConstants.FAILURE & ex.MessageC#

Copiar cdigo

message.Text = MessageConstants.FAILURE + ex.Message;Para probar la impresin del proyecto Ahora estar listo para crear y ejecutar el proyecto. En el men Generar, haga clic en Generar solucin. Si existen errores de generacin, contine y corrjalos ahora. En el men Depurar, haga clic en Iniciar. El informe se mostrar junto con una seleccin de opciones de impresin. 4. Realice una seleccin en cada uno de los controles de opciones de impresin y, a continuacin, haga clic en el botn Imprimir informe. El control Label del mensaje indicar el xito o el fracaso. Si el mensaje indica el fracaso, compruebe la constante CURRENT_PRINTER y otras opciones de configuracin para buscar errores.

1. 2. 3.

5.

Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuracin.

Tutorial: Manipular archivos y directorios en Visual BasicEste tutorial ofrece una introduccin a los fundamentos de la E/S de archivos en Microsoft Visual Basic 2005. Para ilustrar las caractersticas, crea una pequea aplicacin, denominada FileExplorer, que examina archivos de texto en un directorio y proporciona informacin tal como los atributos, hora del ltimo acceso y los primeros 80 caracteres del archivo. Tambin incluye una opcin que escribe la informacin en un archivo de registro.

Nota Las opciones disponibles en los cuadros de dilogo, y los nombres y ubicaciones de los comandos de men que se ven podran diferir de lo que se describe en la Ayuda, segn los valores de configuracin o de edicin activos. Esta pgina de Ayuda se ha redactado teniendo en cuenta la Configuracin general de desarrollo. Para cambiar la configuracin, elija la opcin Importar y exportar configuraciones en el men Herramientas. Para obtener ms informacin, vea Valores de configuracin de Visual Studio.Crear la aplicacin Para iniciar el proyecto, cree un formulario en el que los usuarios puedan seleccionar un directorio, un archivo del directorio y, a continuacin, la informacin sobre el archivo que desean recuperar.

Para crear el proyecto1. En el men Archivo, haga clic en Nuevo proyecto. Aparecer el cuadro de dilogo Nuevo proyecto. 2. En el panel Tipos de proyecto, haga clic en Proyectos de Visual Basic y, a continuacin, elija Aplicacin para Windows en el panel Plantillas. 3. En el cuadro Nombre, escriba

FileExplorer como nombre del proyecto.

Visual Studio agregar el proyecto al Explorador de soluciones y se abrir el Diseador de Windows Forms. 4. Agregue los controles de la siguiente tabla al formulario y establezca los correspondientes valores para sus propiedades.

Objeto TextBox

Propiedades Name Text

Valor txtDirectory Directorio

Button

Name Text

btnSubmit Enviar

Button

Name Text

btnExamine Examinar

ComboBox

Name Text

lstFilePick Seleccione un archivo

CheckBox

Name Text Checked

chkFileLength Longitud del archivo True

CheckBox

Name Text Checked

chkLastAccess Hora del ltimo acceso True

CheckBox

Name Text Checked

chkSave Guardar resultados False

Mostrar el directorio actual La aplicacin FileExplorer necesita un punto de inicio. En consecuencia, el control representa la ruta de acceso actual.

txtDirectory TextBox

utiliza la funcin My.Computer.FileSystem.CurrentDirectory para devolver y mostrar una cadena que

Para devolver el directorio actual1. Haga doble clic en el formulario para crear un controlador de eventos para Se abrir el Editor de cdigo. 2. Agregue el cdigo siguiente para que el control actual. Visual Basic

Form1_Load.

txtDirectory TextBox muestre la ubicacin

Copiar cdigo

txtDirectory.Text = My.Computer.FileSystem.CurrentDirectory3. Ejecute el programa para comprobar que se devuelve la ruta de acceso correcta. El control

txtDirectory TextBox muestra el directorio

actual.

Cambiar directorios

Dado que es posible que un usuario desee seleccionar archivos de un directorio diferente, la aplicacin utiliza la misma propiedad para cambiar de directorio. Para cambiar a un directorio diferente, el usuario escribe una nueva ruta de acceso en el control

txtDirectory TextBox.

Para cambiar de directorio1. Haga doble clic en el control del formulario para crear un controlador de eventos clic para

btnSubmit.Se abrir el Editor de cdigo. 2. Agregue el cdigo siguiente al controlador de eventos clic. Visual Basic

Copiar cdigo

Dim NewPath As String ' NewPath holds the path the user has entered. NewPath = txtDirectory.Text ' Change the location to NewPath. My.Computer.FileSystem.CurrentDirectory = NewPathComprobar si se escribi una ruta de acceso vlida Utilice una instruccin Try...Catch para detectar excepciones que surgen de escribir una ruta de acceso en blanco o no vlida.

Para garantizar rutas de acceso vlidas1. En el evento agregue 2.

btnSubmit_Click, despus de la lnea de cdigo Dim NewPath As String,

Dim ErrorMessage As String en una nueva lnea. My.Computer.FileSystem.CurrentDirectory = Catch

Antes de la lnea de cdigo

NewPath, agregue una instruccin Try en su propia lnea, como se indica a continuacin. Sipresiona la tecla de retorno, el Editor de cdigo insertar automticamente las instrucciones

ex As Exception y End Try. Qutelas, agregar las suyas propias en el paso siguiente.Visual Basic

Copiar cdigo

Try3. Despus de la lnea de cdigo

My.Computer.FileSystem.CurrentDirectory =

NewPath, agregue lo siguiente:

Visual Basic

Copiar cdigo

' This checks to make sure the path is not blank. Catch ex As Exception When NewPath = "" ErrorMessage = "You must enter a path." ' This catches errors caused by a path that is not valid. Catch ErrorMessage = "You must enter a valid path. _ "letter." Finally ' Display the error message only if one exists. If ErrorMessage Nothing Then MsgBox(ErrorMessage) End If End TryMostrar el contenido del directorio en un control ComboBox Para permitir que la aplicacin muestre el contenido del directorio actual, puede utilizar el mtodo My.Computer.FileSystem.GetFiles, que devuelve una coleccin de cadenas que representan los nombres de los archivos en el directorio. Puede utilizar comodines con GetFiles para seleccionar slo archivos de un modelo determinado. En este ejemplo, slo se devuelven los archivos que tienen la extensin .txt.

If trying " & _

"to access a different drive, remember to include the drive " &

Para mostrar el contenido del directorio1. Al principio del evento

btnSubmit_Click, inserte lo siguiente.

Dim fileList As System.Collections.ObjectModel.ReadOnlyCollection(Of String).2. Despus de que la lnea Visual Basic

End Try, inserte lo siguiente.

Copiar cdigo

fileList = My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.CurrentDirectory, _ FileIO.SearchOption.SearchTopLevelOnly, "*.txt")

For Each foundFile As String In fileList lstFilePick.Items.Add(foundFile) NextLa informacin recopilada aparece en el control

lstFilePick ComboBox, en el que podr

seleccionar un archivo especfico para examinarlo. Para probar la aplicacin, ejectela primero en un directorio que no contenga archivos .txt y, a continuacin, en uno que contenga ms de un archivo .txt. En el primer caso, la aplicacin muestra el mensaje de error correspondiente. En el segundo, la aplicacin crea, en el control ComboBox, una lista de todos los archivos .txt del directorio especificado en el control

txtDirectory TextBox.

Permitir que el usuario seleccione un archivo para examinarlo Aunque el control

lstFilePick ComboBox muestra todos los archivos de un directorio, es probable que

el usuario desee seleccionar y examinar un archivo especfico.

Para habilitar la seleccin de un archivo concreto

y

Cree un controlador de evento clic para confirmar la seleccin de un archivo. Visual Basic

btnExamine_Click y agregue el cdigo siguiente para

Copiar cdigo

Dim thisFile As System.IO.FileInfo thisFile = My.Computer.FileSystem.GetFileInfo(CStr(lstFilePick.SelectedItem))Permitir que el usuario determine la informacin que desea recopilar Una vez que se muestran los archivos en el control

lstFilePick ComboBox, el cdigo adicional permite

que el usuario especifique la informacin de la que se informa. Por ejemplo, es posible que un usuario slo desee saber la fecha en la que se tuvo acceso al archivo por ltima vez. Es posible que otro usuario desee conocer tambin el tamao de un archivo. Los usuarios pueden activar o desactivar las casillas de verificacin (chkLastAccess,

chkFileLength) para personalizar los resultados.

Para mostrar informacin especfica1. Declare estas variables al principio del evento

btnExamine_Click despus de

(lstFilePick.SelectedItem):Visual Basic

Copiar cdigo

Dim stringlength As String stringLength = "The file's length, in bytes, is: " Dim stringLastAccess As String stringLastAccess = "The file was last accessed on: " Dim LastAccess As Date Dim Length As Long Dim FirstLine As String = "" Dim FinalString As String = "" Dim NewName As String NewName = CType(lstFilePick.SelectedItem, String) If NewName = Nothing Then MsgBox("You must select a file to examine.") Exit Sub End IfEl mtodo My.Computer.FileSystem.GetFileInfo devuelve un objeto FileInfo que se puede consultar para obtener informacin sobre un archivo. 2. Agregue el cdigo siguiente al final del evento Visual Basic

btnExamine_Click.

Copiar cdigo

' Check last access time. If chkLastAccess.Checked = True Then LastAccess = thisFile.LastAccessTime End IfLa propiedad LastAccessTime determina la hora del ltimo acceso al archivo. El valor Date devuelto indica la fecha y la hora en que se cre un archivo o en que fue modificado por ltima vez. 1. Agregue el cdigo siguiente al final del evento Visual Basic

btnExamine_Click.

Copiar cdigo

' Check Length. If chkFileLength.Checked = True Then Length = thisFile.Length

End IfLa propiedad Length, que determina la longitud del archivo, devuelve un valor de tipo Long que especifica la longitud del archivo en bytes. Mostrar los resultados Para completar la funcionalidad de la aplicacin, un MsgBox informa de la informacin recopilada.

Para mostrar los resultados1. Al final de la instruccin

If que determina si se ha activado o no el control chkLastAccess End If final.

CheckBox, agregue lo siguiente antes de la instruccin Visual Basic

Copiar cdigo

' Add to the messagebox. FinalString = FinalString & stringLastAccess & LastAccess & "." _ & vbCrLf2. Al final de la instruccin

If que determina si se ha activado o no el control chkFileLength End If final.

CheckBox, agregue lo siguiente antes de la instruccin

Visual Basic

Copiar cdigo

' Add to the messagebox. FinalString = FinalString & stringlength & CStr(Length) & "." _ & vbCrLf3. Al final de la instruccin

If que determina si se ha activado o no el control chkFirstLine End If final.

CheckBox, agregue lo siguiente antes de la instruccin

Visual Basic

Copiar cdigo

' Add to the messagebox. FinalString &= FirstLine & vbCrLfGuardar los resultados

Es posible que el usuario desee guardar los resultados de examinar un archivo. En consecuencia, debe agregar cdigo que compruebe si existe un archivo de registro, cree uno si es necesario y, a continuacin, escriba los resultados en el archivo de registro.

Para crear un archivo de registro:

y

Agregue lo siguiente al final del evento Visual Basic

btnExamine_Click.

Copiar cdigo

' Check to see if results should be saved. If chkSave.Checked = True And FinalString "" Then My.Computer.FileSystem.WriteAllText("log.txt", FinalString, True) End IfPara probar la aplicacin1. En el directorio de su eleccin, cree un archivo de texto denominado lnea siguiente: "sta es la primera lnea del primer archivo. La aplicacin FileExplorer slo examina archivos de texto." 2. En el mismo directorio, cree un segundo archivo de texto denominado test2.txt con la primera lnea siguiente: "sta es la primera lnea del segundo archivo. La aplicacin FileExplorer slo examina archivos de texto." 3. 4. Inicie la aplicacin. Escriba una ruta de acceso no vlida y haga clic en Enviar. Aparecer el siguiente mensaje: "You must enter a valid path. If trying to access a different drive, remember to include the drive letter." 5. Escriba la ruta de acceso al directorio que almacena test.txt y haga clic en Enviar. El control 6.

test.txt con la primera

lstFilePick ComboBox mostrar los archivos de texto. lstFilePick ComboBox. Asegrese de que estn activadas

Seleccione test.txt en el control

todas las casillas de verificacin y, a continuacin, haga clic en Examinar. El formulario de resultados incluye la fecha del ltimo acceso y la longitud. 7. Seleccione test2.txt en el control

lstFilePickComboBox, desactive todas las casillas de

verificacin y, a continuacin, haga clic en Examinar.

Aparecer el siguiente mensaje de error : "No file attribute checkboxes selected." 8. Seleccione Hora del ltimo acceso y Guardar resultados, y haga clic en Examinar. El formulario de resultados muestra slo la hora del ltimo acceso. 9. Cierre FileExplorer. Dado que activ la opcin Guardar resultados, FileExplorer gener un archivo de registro denominado

log.txt en el mismo directorio que los archivos de texto.

Para comprobar el registro

y

En el directorio actual, abra

log.txt y confirme que FileExplorer registr la informacin correcta.