Vamos falar sobre o último post “Publicar um objeto derivado de PrintDocument que suporte grandes quantidades de impressão de texto e torne o código-fonte público”
No artigo, publiquei um objeto que herda de System.Drawing.Printing.PrintDocument. Este objeto suporta a geração de documentos de trabalho de impressão a partir de fluxos de arquivos e strings de texto. Não testei com cuidado na época e descobri que havia uma grande lógica. bug nele.
O sintoma do bug é que se você usar a atribuição de string para gerar uma instância de objeto, ficará surpreso ao descobrir que o conteúdo do documento é impresso duas vezes durante a visualização da impressão. E só descobri esse problema mais tarde.
Depois de pesquisar, descobri o motivo, mas o motivo é estranho.
O princípio é que para ler uma linha de texto por vez, eu uso a classe System.IO.StringReader como leitor. Seu construtor é a string que é passada para salvar o conteúdo do texto e, em seguida, usa o método StringReader.ReadLine() para ler o texto e gerar o conteúdo impresso.
Mas tenho que implementar um mecanismo para verificar se o leitor leu o último conteúdo, e o método StringReader.Peek() serve para detectar se há conteúdo por trás dele, e se não houver conteúdo, ele retorna um valor de -1 . Após meus testes, não importa como seja detectado, -1 não é retornado. Em vez disso, -1 é retornado após inserir o conteúdo duas vezes, o que faz com que o mesmo conteúdo seja exibido duas vezes.
Este bug foi corrigido. Modifiquei o método de detecção através de outros métodos. Desta vez não há necessidade de digitar o conteúdo duas vezes. Quem baixou, faça o download novamente.
Agora vamos falar sobre o controle PrintPreveiwControl.
A primeira coisa a observar é que se trata de um controle de janela personalizado, não de uma nova janela de visualização de impressão. É a parte da janela de visualização da impressão que exibe a visualização da impressão. Se quiser utilizá-lo, você deve criar um formulário de janela e depois utilizá-lo.
Para ser honesto, a própria janela de visualização de impressão da Microsoft em .net é muito ruim. Não parece boa e não é fácil de usar, então a Microsoft fornece um controle System.Windows.Forms.PrintPreviewControl, e esse controle também não é muito bom. O principal motivo é que ele não suporta a roda do mouse, e o mais importante é que não suporta a contagem de páginas de impressão. O número de páginas disponíveis durante a visualização da impressão é um atributo necessário para botões como "Página anterior" e. "Próxima página" na janela de visualização de impressão.
Então usei o Reflector para descompilar o controle PrintPreviewControl da Microsoft, usei seu código original e adicionei o manipulador de eventos "OnMouseWheel", e o OnMouseWheel foi projetado especificamente para lidar com a operação da roda do mouse quando ela é rolada. Publique também o código-fonte.
Adicionei muitos comentários no método OnMouseWheel. Amigos que desejam lidar com a roda do mouse podem usar os princípios deste código.
Baixar: Clique aqui para baixar
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html