放飞你的梦想--翱翔我的天空 | 会员登陆 | 繁體中文 | 站点地图 | 站长博客
 | 网站首页 | 文章中心 | IT 前沿 | 清怡画风 | 视频教程 | 资源下载 | 精彩图库 | 博客文赏 | 天空论坛 | 访客留言 | 音乐版 | 
    本站全新推出IT 前沿频道欢迎大家访问 地址 http://it.tkbbs.com  [风雪残士  2005年12月9日]            本站推出新浪VIVI收藏夹服务,欢迎使用  [风雪残士  2005年10月18日]        
您现在的位置: 翱翔翼站 >> 文章中心 >> 编程开发 >> 网页开发 >> ASP.NET >> 文章正文 今天是:
发布一个自己写的PrintPreviewControl自定义控件,支持鼠标滚轮,源代码下载 【字体:
作 者:佚名 文章来源:网络 更新:2006-8-15 1:36:58 点击:







先说一下上次发布的 “ 发布一个支持大量文本打印的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



文章录入:风雪残士    责任编辑:风雪残士 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    最新文章 TOP10
    最新热门 TOP10
    最新推荐TOP10
    翱翔翼站拥有本站所有版权! Copyright © 2005 - 2008 5-IT.COM
    本站维护 :风雪残士

    浙ICP备05039908号
    努力打造国内最全的电脑技术资料库