在VS2003/VS2005中,使用打印对话框PrintPreviewDialog类时,每次打开窗口都是处于常规状态,即Normal.用户查看预览时不是很方便,如果窗口一打开就自动按照最大化进行显示就可以了,但是PrintPreviewDialog类中的WindowState属性不可见,没办法直接去修改它.
而采用窗口打开时动态修改它的窗口位置和尺寸的方法,由于不同用户屏幕分辨率的不同,就需要动态得到这些信息,也不是很方便.因此通过设置WindowState属性是最好的方法了.
还好DotNet提供的反射,我们可以利用这个功能来实现:定义一个类.
using
System;
using
System.ComponentModel;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
public
class
PrintPreviewDialogEx
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
public static void MakePrintPreviewDialogMaximized(PrintPreviewDialog ppd)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
System.Reflection.PropertyInfo[] pis=ppd.GetType().GetProperties();
for(int i=0;i<pis.Length;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(pis[i].Name=="WindowState")
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
pis[i].SetValue(ppd,FormWindowState.Maximized, null);
break;
}
}
}
}
使用时,采用如下代码:
PrintPreviewDialog pvd
=
new
PrintPreviewDialog();
pvd.Document
=
AppCfg.printData.pdoc;
PrintPreviewDialogEx.MakePrintPreviewDialogMaximized(pvd);
......
pvd.ShowDialog();
......
这样,在对话框显示时就自动按照最大化显示了.