程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 發布一個自己寫的PrintPreviewControl自定義控件,支持鼠標滾輪,源代碼下載

發布一個自己寫的PrintPreviewControl自定義控件,支持鼠標滾輪,源代碼下載

編輯:.NET實例教程

先說一下上次發布的 “ 發布一個支持大量文本打印的PrintDocument派生對象,公開源代碼”
的文章,我發布了一個繼承與System.Drawing.Printing.PrintDocument的對象,這個對象支持從文件流和文本字符串內生成打印作業文檔,當時我沒有仔細測試,發現其中有一個很大的邏輯bug。

bug的表現是假如你使用字符串賦值的辦法生成對象實例,那麼打印預覽的時候你會驚奇的發現預覽的時候文檔內容打印了兩遍。而我後來才發現這個問題。

經過查找,我發現了原因,但這個原因很奇妙。
原理是,我為了一次讀取一行文本,我使用了System.IO.StringReader類作為讀取器。而它的構造函數就是傳遞進來的保存文本內容的字符串,然後使用 StringReader.ReadLine() 方法來讀取文本,生成打印的內容。

但是我必須要實現一個機制,這個機制用來檢查讀取器是否讀取到最後的內容,而StringReader.Peek()方法就是檢測後面是否有內容,如果沒有內容就返回-1值。而經過我的測試,無論是否怎樣檢測,都不返回-1,而是把內容輸入兩遍後才返回-1,這樣就導致同樣的內容顯示了兩遍。

這個bug已經修改,我通過其他的辦法修改了檢測手段,這次無需打兩次內容了。請下載的各位重新下載一次。


現在開始說PrintPreveiwControl控件。

首先要提醒大家注意的是,它是一個自定義windows 控件,而不是新的打印預覽窗口。它就是打印預覽窗口中顯示打印預覽的那部分內容,如果大家要使用的話,必須建立一個Windows窗體,然後使用它既可。

說實話,微軟在.Net中自帶的打印預覽窗口非常不好,即不好看,也不好用,所以微軟就提供了一個System.Windows.Forms.PrintPrevIEwControl控件,而這個控件也不太好,主要是不支持鼠標滾輪,另外最重要的就是不支持打印頁面計數,而打印預覽時的可用頁面數目是打印預覽窗口中“上頁”,“下頁”這樣的按鈕所必須的屬性。

所以我使用了Reflector反編譯了微軟的PrintPrevIEwControl控件,使用它的原始代碼並添加了“OnMouseWheel”事件處理程序,而OnMouseWheel就是專門處理鼠標滾輪滾動時的操作的。同樣公布源代碼。

OnMouseWheel方法內我添加了大量注釋,有要處理鼠標滾輪的朋友可以根據這個代碼的原理來發揮。

下載:單擊此處下載

http://www.cnblogs.com/submaIE/archive/2006/08/11/474568.Html


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved