Sprechen wir über den letzten Beitrag „Veröffentlichen Sie ein von PrintDocument abgeleitetes Objekt, das das Drucken großer Textmengen unterstützt, und machen Sie den Quellcode öffentlich.“
In dem Artikel habe ich ein Objekt veröffentlicht, das von System.Drawing.Printing.PrintDocument erbt. Dieses Objekt unterstützt die Generierung von Druckauftragsdokumenten aus Dateiströmen und Textzeichenfolgen. Ich habe es damals nicht sorgfältig getestet und festgestellt, dass es eine große Logik gibt Fehler drin.
Das Symptom des Fehlers besteht darin, dass Sie überrascht sein werden, dass der Dokumentinhalt während der Druckvorschau zweimal gedruckt wird, wenn Sie zum Generieren einer Objektinstanz die Zeichenfolgenzuweisung verwenden. Und dieses Problem habe ich erst später entdeckt.
Nach der Suche habe ich den Grund gefunden, aber der Grund ist seltsam.
Das Prinzip besteht darin, dass ich zum Lesen jeweils einer Textzeile die Klasse System.IO.StringReader als Reader verwende. Sein Konstruktor ist die Zeichenfolge, die zum Speichern des Textinhalts übergeben wird, und verwendet dann die Methode StringReader.ReadLine(), um den Text zu lesen und gedruckten Inhalt zu generieren.
Aber ich muss einen Mechanismus implementieren, um zu überprüfen, ob der Leser den letzten Inhalt gelesen hat, und die Methode StringReader.Peek() soll erkennen, ob sich dahinter Inhalt befindet, und wenn kein Inhalt vorhanden ist, wird der Wert -1 zurückgegeben . Nach meinen Tests wird -1 unabhängig davon, wie es erkannt wird, nicht zurückgegeben. Stattdessen wird -1 nach zweimaliger Eingabe des Inhalts zurückgegeben, was dazu führt, dass derselbe Inhalt zweimal angezeigt wird.
Dieser Fehler wurde durch andere Methoden behoben. Diesmal ist es nicht erforderlich, den Inhalt zweimal einzugeben. Jeder, der es heruntergeladen hat, bitte laden Sie es erneut herunter.
Lassen Sie uns nun über das PrintPreveiwControl-Steuerelement sprechen.
Zunächst ist zu beachten, dass es sich um ein benutzerdefiniertes Windows-Steuerelement und nicht um ein neues Druckvorschaufenster handelt. Es ist der Teil des Druckvorschaufensters, der die Druckvorschau anzeigt. Wenn Sie es verwenden möchten, müssen Sie ein Windows-Formular erstellen und es dann verwenden.
Um ehrlich zu sein, sieht Microsofts eigenes Druckvorschaufenster in .net nicht gut aus und ist nicht einfach zu verwenden. Daher stellt Microsoft ein System.Windows.Forms.PrintPreviewControl-Steuerelement bereit, und dieses Steuerelement ist auch nicht sehr gut Der Hauptgrund ist, dass das Mausrad nicht unterstützt wird, und der wichtigste Grund ist, dass es die Seitenzählung beim Drucken nicht unterstützt. Die Anzahl der verfügbaren Seiten während der Druckvorschau ist ein notwendiges Attribut für Schaltflächen wie „Vorherige Seite“. „Nächste Seite“ im Druckvorschaufenster.
Deshalb habe ich Reflector verwendet, um das PrintPreviewControl-Steuerelement von Microsoft zu dekompilieren, den Originalcode verwendet und den Ereignishandler „OnMouseWheel“ hinzugefügt. OnMouseWheel ist speziell für die Handhabung des Mausrads beim Scrollen konzipiert. Veröffentlichen Sie auch den Quellcode.
Ich habe der OnMouseWheel-Methode viele Kommentare hinzugefügt. Freunde, die sich mit dem Mausrad befassen möchten, können die Prinzipien dieses Codes verwenden.
Download: Klicken Sie hier, umhttp://www.cnblogs.com/submaie/archive/2006/08/11/474568.html