Parlons du dernier article « Publiez un objet dérivé de PrintDocument qui prend en charge de grandes quantités d'impression de texte et rendez le code source public »
Dans l'article, j'ai publié un objet qui hérite de System.Drawing.Printing.PrintDocument. Cet objet prend en charge la génération de documents de travail d'impression à partir de flux de fichiers et de chaînes de texte. Je ne l'ai pas testé attentivement à l'époque et j'ai trouvé qu'il y avait une grande logique. bug dedans.
Le symptôme du bug est que si vous utilisez l'affectation de chaîne pour générer une instance d'objet, vous serez surpris de constater que le contenu du document est imprimé deux fois lors de l'aperçu avant impression. Et je n'ai découvert ce problème que plus tard.
Après avoir cherché, j'ai trouvé la raison, mais la raison est étrange.
Le principe est que pour lire une ligne de texte à la fois, j'utilise la classe System.IO.StringReader comme lecteur. Son constructeur est la chaîne transmise pour enregistrer le contenu du texte, puis utilise la méthode StringReader.ReadLine() pour lire le texte et générer le contenu imprimé.
Mais je dois implémenter un mécanisme pour vérifier si le lecteur a lu le dernier contenu, et la méthode StringReader.Peek() consiste à détecter s'il y a du contenu derrière, et s'il n'y a pas de contenu, elle renvoie une valeur de -1. . Après mes tests, quelle que soit la manière dont il est détecté, -1 n'est pas renvoyé. Au lieu de cela, -1 est renvoyé après avoir saisi le contenu deux fois, ce qui entraîne l'affichage du même contenu deux fois.
Ce bug a été corrigé. J'ai modifié la méthode de détection via d'autres méthodes. Cette fois, il n'est pas nécessaire de saisir le contenu deux fois. Si vous l'avez téléchargé, veuillez le télécharger à nouveau.
Parlons maintenant du contrôle PrintPreveiwControl.
La première chose à noter est qu'il s'agit d'un contrôle Windows personnalisé et non d'une nouvelle fenêtre d'aperçu avant impression. C'est la partie de la fenêtre d'aperçu avant impression qui affiche l'aperçu avant impression. Si vous souhaitez l'utiliser, vous devez créer un formulaire Windows puis l'utiliser.
Pour être honnête, la propre fenêtre d'aperçu avant impression de Microsoft dans .net est très mauvaise. Elle n'a pas l'air bien et n'est pas facile à utiliser, donc Microsoft fournit un contrôle System.Windows.Forms.PrintPreviewControl, et ce contrôle n'est pas très bon non plus. . La raison principale est qu'il ne prend pas en charge la molette de la souris, et le plus important est qu'il ne prend pas en charge le comptage des pages d'impression. Le nombre de pages disponibles lors de l'aperçu avant impression est un attribut nécessaire pour les boutons tels que "Page précédente" et. "Page suivante" dans la fenêtre d'aperçu avant impression.
J'ai donc utilisé Reflector pour décompiler le contrôle PrintPreviewControl de Microsoft, utilisé son code d'origine et ajouté le gestionnaire d'événements "OnMouseWheel", et OnMouseWheel est spécialement conçu pour gérer le fonctionnement de la molette de la souris lorsqu'elle défile. Publiez également le code source.
J'ai ajouté beaucoup de commentaires dans la méthode OnMouseWheel. Les amis qui souhaitent gérer la molette de la souris peuvent utiliser les principes de ce code.
Téléchargement : Cliquez ici pour télécharger
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html