前回の投稿「大量のテキスト印刷をサポートする PrintDocument 派生オブジェクトを公開し、ソース コードを公開する」について話しましょう。
この記事では、System.Drawing.Printing.PrintDocument を継承するオブジェクトを公開しました。このオブジェクトは、ファイル ストリームとテキスト文字列からの印刷ジョブ ドキュメントの生成をサポートしています。当時は注意深くテストしていなかったので、大きなロジックがあることがわかりました。バグがあります。
このバグの症状は、文字列割り当てを使用してオブジェクト インスタンスを生成すると、印刷プレビュー中にドキュメントのコンテンツが 2 回印刷されることに驚くことです。そして、私はこの問題を後から発見しました。
調べてみたら理由は分かったのですが、その理由が不思議です。
原則として、一度に 1 行のテキストを読み取るために、System.IO.StringReader クラスをリーダーとして使用します。そのコンストラクターは、テキスト コンテンツを保存するために渡される文字列であり、その後 StringReader.ReadLine() メソッドを使用してテキストを読み取り、印刷コンテンツを生成します。
ただし、リーダーが最後のコンテンツを読んだかどうかを確認するメカニズムを実装する必要があります。StringReader.Peek() メソッドはその背後にコンテンツがあるかどうかを検出し、コンテンツがない場合は値 -1 を返します。 。テストしたところ、どのように検出されても -1 は返されず、内容を 2 回入力すると -1 が返され、同じ内容が 2 回表示されます。
このバグは別の方法で修正され、コンテンツを 2 回入力する必要がなくなりました。ダウンロードされた方は再度ダウンロードしてください。
次に、PrintPreveiwControl コントロールについて説明します。
まず注意すべきことは、これはカスタム ウィンドウ コントロールであり、新しい印刷プレビュー ウィンドウではないということです。これは、印刷プレビューを表示する印刷プレビュー ウィンドウの一部です。これを使用する場合は、Windows フォームを作成して使用する必要があります。
正直に言うと、Microsoft 独自の .net の印刷プレビュー ウィンドウは見た目も良くなく、使いにくいため、Microsoft は System.Windows.Forms.PrintPreviewControl コントロールを提供していますが、このコントロールもあまり良くありません。主な理由は、マウスホイールがサポートされていないことですが、最も重要なことは、印刷プレビュー中に使用可能なページ数が「前のページ」や「前のページ」などのボタンに必要な属性であることです。印刷プレビューウィンドウの「次のページ」。
そこで、Reflector を使用して Microsoft の PrintPreviewControl コントロールを逆コンパイルし、元のコードを使用して「OnMouseWheel」イベント ハンドラーを追加しました。OnMouseWheel は、マウス ホイールがスクロールされたときの操作を処理するように特別に設計されています。ソースコードも公開します。
OnMouseWheel メソッドに多くのコメントを追加しました。マウス ホイールを扱いたい人は、このコードの原則を使用できます。
ダウンロード:ここをクリックしてダウンロード
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html