PageSetupDialog 类的一个 BUGWord格式文档下载.docx

上传人:b****1 文档编号:15291293 上传时间:2022-10-29 格式:DOCX 页数:19 大小:509.83KB
下载 相关 举报
PageSetupDialog 类的一个 BUGWord格式文档下载.docx_第1页
第1页 / 共19页
PageSetupDialog 类的一个 BUGWord格式文档下载.docx_第2页
第2页 / 共19页
PageSetupDialog 类的一个 BUGWord格式文档下载.docx_第3页
第3页 / 共19页
PageSetupDialog 类的一个 BUGWord格式文档下载.docx_第4页
第4页 / 共19页
PageSetupDialog 类的一个 BUGWord格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

PageSetupDialog 类的一个 BUGWord格式文档下载.docx

《PageSetupDialog 类的一个 BUGWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《PageSetupDialog 类的一个 BUGWord格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

PageSetupDialog 类的一个 BUGWord格式文档下载.docx

013:

PageSetupTester()014:

{015:

Text="

页面设置测试"

;

016:

Width=380;

017:

018:

varlbl=newLabel();

019:

lbl.Parent=this;

020:

lbl.Text=string.Format(021:

"

OS:

{1}{0}CLR:

{2}({3}){0}{4}{5}{0}{0}{6}{0}{7}{0}{8}{0}{9}{0}{10}"

022:

Environment.NewLine,023:

Environment.OSVersion,024:

Environment.Version,025:

RuntimeFramework.CurrentFramework,026:

控制面板的区域选项的度量衡系统为"

027:

(RegionInfo.CurrentRegion.IsMetric?

"

公制。

"

:

英制。

),028:

当度量衡系统为公制,且操作系统为Windows时,"

029:

显示在页面设置对话框中的当前页边距是以公制为单位的数值,"

030:

按下“确定”时,PageSetupDialog类内部却把屏幕上显示的"

031:

页边距数值按英制为单位对页面进行设定,"

032:

造成页边距不断减少的BUG。

);

033:

lbl.Top=10;

034:

lbl.AutoSize=true;

035:

036:

vardocA=newPrintDocument();

037:

docA.PrintPage+=PrintPage;

038:

varsetupA=newPageSetupDialog();

039:

setupA.Document=docA;

040:

041:

varbtnPageSetupA=newButton();

042:

btnPageSetupA.Parent=this;

043:

btnPageSetupA.Text="

页面设置A(可能有BUG)"

044:

btnPageSetupA.Top=145;

045:

btnPageSetupA.Width=150;

046:

btnPageSetupA.Click+=(sender,e)=>

setupA.ShowDialog();

047:

048:

varbtnPreviewA=newButton();

049:

btnPreviewA.Parent=this;

050:

btnPreviewA.Text="

打印预览A"

051:

btnPreviewA.Top=btnPageSetupA.Top;

052:

btnPreviewA.Left=btnPageSetupA.Right+5;

053:

btnPreviewA.Width=100;

054:

btnPreviewA.Click+=(sender,e)=>

PreviewPrint(docA);

055:

056:

vardocB=newPrintDocument();

057:

docB.PrintPage+=PrintPage;

058:

setupB=newPageSetupDialog();

059:

setupB.Document=docB;

060:

061:

varbtnSetupB=newButton();

062:

btnSetupB.Parent=this;

063:

btnSetupB.Text="

页面设置B(修正)"

064:

btnSetupB.Top=btnPageSetupA.Top+30;

065:

btnSetupB.Width=150;

066:

btnSetupB.Click+=PageSetupBClick;

067:

068:

varbtnPreviewB=newButton();

069:

btnPreviewB.Parent=this;

070:

btnPreviewB.Text="

打印预览B"

071:

btnPreviewB.Top=SetupB.Top;

072:

btnPreviewB.Left=btnSetupB.Right+5;

073:

btnPreviewB.Width=100;

074:

btnPreviewB.Click+=(sender,e)=>

PreviewPrint(docB);

075:

}076:

077:

voidPrintPage(objecto,PrintPageEventArgse)078:

{079:

Graphicsg=e.Graphics;

080:

Rectangler=e.MarginBounds;

081:

g.DrawRectangle(newPen(Color.Red),r);

082:

g.DrawString(r.ToString(),newFont("

宋体"

40),newSolidBrush(Color.Blue),r);

083:

}084:

085:

voidPreviewPrint(PrintDocumentdoc)086:

{087:

varppc=newPreviewPrintController();

088:

doc.PrintController=ppc;

089:

doc.Print();

090:

newPreviewPrintDialog(ppc.GetPreviewPageInfo()).ShowDialog();

091:

}092:

093:

voidPageSetupBClick(objecto,EventArgse)094:

{095:

//当前线程所使用的区域选项的度量衡系统为公制,且操作系统为Windows时,096:

//显示在页面设置对话框中的当前页边距是以公制为单位的数值,097:

//按下“确定”时,PageSetupDialog类内部却把屏幕上显示的098:

//页边距数值按英制为单位对页面进行设定,099:

//造成页边距不断减少的BUG。

100:

//以下代码就是为了纠正这个BUG的。

101:

if(setupB.ShowDialog()==DialogResult.OK&

&

RegionInfo.CurrentRegion.IsMetric102:

&

Environment.OSVersion.Platform!

=PlatformID.Unix)103:

{104:

setupB.PageSettings.Margins=PrinterUnitConvert.Convert105:

(setupB.PageSettings.Margins,PrinterUnit.Display,PrinterUnit.TenthsOfAMillimeter);

106:

}107:

}108:

109:

[STAThread]110:

staticvoidMain()111:

{112:

Application.EnableVisualStyles();

113:

Application.Run(newPageSetupTester());

114:

}115:

}116:

}

 

本来嘛,在C#程序要得到一个页面设置对话框是非常简单的事,只要象上述程序中第46行那样给“页面设置”按钮的Click事件注册一个调用 

System.Windows.Forms.PageSetupDialog 

类的ShowDialog 

方法的 

Lambda表达式就行了。

编译响应文件mak.rsp的内容如下:

-t:

winexe

-r:

System.Drawing.dll

System.Windows.Forms.dll

PageSetupTester.cs

PreviewPrintDialog.cs

RuntimeFramework.cs

用于打印预览的PreviewPrintDialog.cs将在本文最后给出。

而RuntimeFramework.cs请参见我在2009年12月13日写的“.NETFrameworkCLR版本检测”一文。

让我们在WindowsVista操作系统的.NETFramework4环境下编译和运行:

E:

\work>

C:

\Windows\Microsoft.NET\Framework\v4.0.30319\csc@mak.rsp

Microsoft(R)VisualC#2010编译器4.0.30319.1版

版权所有(C)MicrosoftCorporation。

保留所有权利。

PageSetupTester

然后点击“打印预览B”按钮,得到的结果如下图(图1)所示:

图1

再点击“页面设置B(修正)”按钮,得到的结果如下图(图2)所示:

图2

点击上图中的“确定”按钮后,再次点击主窗体中的“打印预览B”按钮,得到的结果依然如图1所示。

这是页面设置对话框应该有的正确行为。

实际上这个行为是经过PageSetupTester.cs中第104行到第105行的语句修正后的结果。

现在让我们点击主窗体中的“打印预览A”按钮,得到的结果也是如图1如示,这也是正常的结果。

然后再点击主窗体中的“页面设置A(可能有BUG)”按钮,得到的得到如图2所示,这也是预期的结果。

然后再点“确定”按钮。

现在,让我们再次点击主窗体中的“打印预览A”按钮,结果如下图所示:

这就不正常了。

再次点击主窗体中的“页面设置A(可能有BUG)”按钮,得到的得到如下图所示:

从上图中可以看到,页边距由图2中的“10毫米”变为现在的“3.94毫米”了。

我们知道,在控制面板的区域选项的度量衡系统设为英制时,页边距单位是“1/10英寸”。

我们还知道“1/10英寸≈2.54毫米”。

而“10/2.54≈3.94”,这个公式能够说明为什么页边距由图2中的“10毫米”变为现在的“3.94毫米”了。

可能是BCL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1