Download - Tutorial Visual Basic
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.