在VS2003/VS2005中,使用列印對話方塊PrintPreviewDialog類時,每次開啟視窗都是處於常規狀態,即Normal.使用者查看預覽時不是很方便,如果視窗一開啟就自動按照最大化進行顯示就可以了,但是PrintPreviewDialog類中的WindowState屬性不可見,沒辦法直接去修改它.
而採用視窗開啟時動態修改它的視窗位置和尺寸的方法,由於不同使用者螢幕解析度的不同,就需要動態得到這些資訊,也不是很方便.因此通過設定WindowState屬性是最好的方法了.
還好DotNet提供的反射,我們可以利用這個功能來實現:定義一個類.
using System;
using System.ComponentModel;
public class PrintPreviewDialogEx
...{
public static void MakePrintPreviewDialogMaximized(PrintPreviewDialog ppd)
...{
System.Reflection.PropertyInfo[] pis=ppd.GetType().GetProperties();
for(int i=0;i<pis.Length;i++)
...{
if(pis[i].Name=="WindowState")
...{
pis[i].SetValue(ppd,FormWindowState.Maximized, null);
break;
}
}
}
}
使用時,採用如下代碼:
PrintPreviewDialog pvd=new PrintPreviewDialog();
pvd.Document=AppCfg.printData.pdoc;
PrintPreviewDialogEx.MakePrintPreviewDialogMaximized(pvd);
......
pvd.ShowDialog();
......
這樣,在對話方塊顯示時就自動按照最大化顯示了.