Mari kita bahas postingan terakhir “Publikasikan objek turunan PrintDocument yang mendukung pencetakan teks dalam jumlah besar dan menjadikan kode sumbernya publik”
Dalam artikel tersebut, saya menerbitkan objek yang diwarisi dari System.Drawing.Printing.PrintDocument. Objek ini mendukung pembuatan dokumen pekerjaan pencetakan dari aliran file dan string teks bug di dalamnya.
Gejala bug adalah jika Anda menggunakan penetapan string untuk menghasilkan instance objek, Anda akan terkejut menemukan bahwa konten dokumen dicetak dua kali selama pratinjau cetak. Dan saya baru mengetahui masalah ini belakangan.
Setelah mencari, saya menemukan alasannya, tapi alasannya aneh.
Prinsipnya adalah untuk membaca satu baris teks dalam satu waktu, saya menggunakan kelas System.IO.StringReader sebagai pembacanya. Konstruktornya adalah string yang diteruskan untuk menyimpan konten teks, dan kemudian menggunakan metode StringReader.ReadLine() untuk membaca teks dan menghasilkan konten cetak.
Tapi saya harus menerapkan mekanisme untuk memeriksa apakah pembaca telah membaca konten terakhir, dan metode StringReader.Peek() untuk mendeteksi apakah ada konten di baliknya, dan jika tidak ada konten, ia mengembalikan nilai -1 . Setelah pengujian saya, tidak peduli bagaimana terdeteksi, -1 tidak dikembalikan. Sebaliknya, -1 dikembalikan setelah memasukkan konten dua kali, yang menyebabkan konten yang sama ditampilkan dua kali.
Bug ini telah diperbaiki. Saya memodifikasi metode deteksi melalui metode lain. Siapa pun yang mengunduhnya, silakan unduh lagi.
Sekarang mari kita bicara tentang kontrol PrintPreveiwControl.
Hal pertama yang perlu diperhatikan adalah ini adalah kontrol jendela khusus, bukan jendela pratinjau cetak baru. Ini adalah bagian dari jendela pratinjau cetak yang menampilkan pratinjau cetak. Jika ingin menggunakannya, Anda harus membuat formulir windows dan kemudian menggunakannya.
Sejujurnya, jendela pratinjau cetak milik Microsoft di .net sangat buruk. Kelihatannya tidak bagus dan tidak mudah digunakan, jadi Microsoft menyediakan kontrol System.Windows.Forms.PrintPreviewControl, dan kontrol ini juga tidak terlalu bagus. Alasan utamanya adalah tidak mendukung roda mouse, dan yang paling penting adalah tidak mendukung penghitungan halaman pencetakan. Jumlah halaman yang tersedia selama pratinjau cetak merupakan atribut yang diperlukan untuk tombol seperti "Halaman Sebelumnya" dan "Halaman Berikutnya" di jendela pratinjau cetak.
Jadi saya menggunakan Reflector untuk mendekompilasi kontrol PrintPreviewControl Microsoft, menggunakan kode aslinya dan menambahkan event handler "OnMouseWheel", dan OnMouseWheel dirancang khusus untuk menangani pengoperasian roda mouse saat digulir. Publikasikan juga kode sumbernya.
Saya menambahkan banyak komentar pada metode OnMouseWheel. Teman-teman yang ingin berurusan dengan roda mouse dapat menggunakan prinsip kode ini.
Unduh: Klik di sini untuk mengunduh
http://www.cnblogs.com/submaie/archive/2006/08/11/474568.html