PageSetupDialog 类的一个 BUGWord格式文档下载.docx
《PageSetupDialog 类的一个 BUGWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《PageSetupDialog 类的一个 BUGWord格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
![PageSetupDialog 类的一个 BUGWord格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-10/29/2cf20227-1ace-4674-a8d6-f0422121d05d/2cf20227-1ace-4674-a8d6-f0422121d05d1.gif)
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