1 / 4
文档名称:

WinForm打印之页边距.doc

格式:doc   大小:27KB   页数:4页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

WinForm打印之页边距.doc

上传人:乘风破浪 2018/11/29 文件大小:27 KB

下载得到文件列表

WinForm打印之页边距.doc

相关文档

文档介绍

文档介绍::这也不会,那也不会。人家有的是背景,而我有的是背影。肉的理想,白菜的命。肉的理想,白菜的命。白马啊 你死去哪了!是不是你把王子弄丢了不敢来见我了。 :
默认情况下PrintDocument是不理会页边距的(MS再次让人无语。。。),这也是为什么有人说明明设了页边距在打印预览里却没有效果的原因。
解决办法是设置PrintDocument对象的OriginAtMargins属性为True,如下:
= true; //启用页边距
再来看一下从元数据中提取的关于OriginAtMargins属性的定义:
//
// 摘要:
// 获取或设置一个值,该值指示与页关联的图形对象的位置是位于用户指定边距内,还是位于该页可打印区域的左上角。
//
// 返回结果:
// 如果图形起始于页面边距,则为 true;如果图形原点位于该页可打印区域的左上角,则为 false。默认为 false。
[DefaultValue(false)]
public bool OriginAtMargins { get; set; }
可以看到此属性的DefaultValue为false,所以如果不改的话,页边距设的再大也没有用。


这个问题一度搞得我有点儿心烦——每打开一次“页面设置”对话框,哪怕你不做任何更改就点“确定”关闭它,当你再打开它时你会发现,上面显示的页边距“神奇地”变小了。。。
举个具体的例子来说,如果你没有编程预设置页边距的话,默认第一次打开“页面设置”时的页边距应该是10mm,当你点“确定”关闭它再打开后,,再重复这一操作,,依此类推。
之所以会出现不正常的现象,都是因为制式转换导致的——
.NET对于页边距是绝对的“大国沙文主义”,只认美制的“英寸”不认别的制式,其默认单位是“”。
而我们的OS就比较入乡随俗,知道用“毫米”。所以在PageSetupDialog窗体上中显示的单位是“毫米”(取决于OS)。
由于两边制式不一样,搭不上话,.NET就会强制的把OS的制式单位给转换成它****惯”的“英寸”。也就是说:
在你点击“页面设置”对话框的“确定”按钮后,.NET会自动进行“毫米->英寸”的隐式转换。
本来这也没什么大不了,问题出现在:
再度打开PageSetupDialog对话框时,PageSetupDialog对象却并没有进行与上面的隐式转换对应的“英寸->毫米”逆向转换,
而仅仅是简单粗暴地将单位名改了,从“Display”()改成了“TenthsOfAMillimeter”(),数值却动都没动一下。
也就是说不管你给PageSetupDialog什么值,。
看下面流程就明白了:
显示10(mm)-->(in)-->()-->因为Margin尺寸只接受int型,so-->39() -->错误转换,只改单位-->39()-->(mm)