Hablemos de la última publicación "Publicar un objeto derivado de PrintDocument que admita grandes cantidades de impresión de texto y hacer público el código fuente".
En el artículo, publiqué un objeto que hereda de System.Drawing.Printing.PrintDocument. Este objeto admite la generación de documentos de trabajos de impresión a partir de secuencias de archivos y cadenas de texto. No lo probé cuidadosamente en ese momento y descubrí que había una gran lógica. error en él.
El síntoma del error es que si utiliza la asignación de cadenas para generar una instancia de objeto, se sorprenderá al descubrir que el contenido del documento se imprime dos veces durante la vista previa de impresión. Y sólo descubrí este problema más tarde.
Después de buscar, encontré el motivo, pero el motivo es extraño.
El principio es que para leer una línea de texto a la vez, uso la clase System.IO.StringReader como lector. Su constructor es la cadena que se pasa para guardar el contenido del texto y luego usa el método StringReader.ReadLine() para leer el texto y generar contenido impreso.
Pero tengo que implementar un mecanismo para verificar si el lector ha leído el último contenido, y el método StringReader.Peek() es detectar si hay contenido detrás, y si no hay contenido, devuelve un valor de -1. . Después de mis pruebas, no importa cómo se detecte, no se devuelve -1. En cambio, se devuelve -1 después de ingresar el contenido dos veces, lo que hace que el mismo contenido se muestre dos veces.
Este error se corrigió. Modifiqué el método de detección mediante otros métodos. Esta vez no es necesario escribir el contenido dos veces. Cualquiera que lo haya descargado, descárguelo nuevamente.
Ahora hablemos del control PrintPreveiwControl.
Lo primero que hay que tener en cuenta es que se trata de un control de Windows personalizado, no de una nueva ventana de vista previa de impresión. Es la parte de la ventana de vista previa de impresión que muestra la vista previa de impresión. Si desea utilizarla, debe crear un formulario de Windows y luego utilizarlo.
Para ser honesto, la ventana de vista previa de impresión de Microsoft en .net es muy mala. No se ve bien y no es fácil de usar, por lo que Microsoft proporciona un control System.Windows.Forms.PrintPreviewControl, y este control tampoco es muy bueno. La razón principal es que no admite la rueda del mouse y lo más importante es que no admite la impresión del recuento de páginas. El número de páginas disponibles durante la vista previa de impresión es un atributo necesario para botones como "Página anterior" y. "Página siguiente" en la ventana de vista previa de impresión.
Entonces usé Reflector para descompilar el control PrintPreviewControl de Microsoft, usé su código original y agregué el controlador de eventos "OnMouseWheel". OnMouseWheel está diseñado específicamente para manejar la operación de la rueda del mouse cuando se desplaza. Publica también el código fuente.
Agregué muchos comentarios en el método OnMouseWheel. Los amigos que quieran manejar la rueda del mouse pueden usar los principios de este código.
Descargar: Haga clic aquí para descargar
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html