急!打印预览出错!!很奇怪,高手救命!!

xlzxc 2006-10-10 03:55:10
打印预览的时候,第一次正常。同样的文档,再预揽一次,就不对了。
弹出对话框:应用程序发生了未处理的异常。
为将对象引用设置到对样的实例。


都是同一个printdocument,为什么会这样呢??
...全文
245 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jointan 2006-10-22
  • 打赏
  • 举报
回复
printdoc.PrintPage+= new PrintPageEventHandler(PrintPage);
你应该把这句放到构造函数可执行的地方,不能打开一次执行一次,你这么做会导致每预览一次,PrintPage方法执行增加一次
xlzxc 2006-10-22
  • 打赏
  • 举报
回复
在XP下面调试后发现,如果在class A的构造里面去掉这两行:
PageSize_W=printdoc.defaultPageSettings.Bounds.Width;
PageSize_H=printdoc.defaultPageSettings.Bounds.Heigt;
程序也能正常的运行。

难道是XP下的PageSettings有问题。
xlzxc 2006-10-22
  • 打赏
  • 举报
回复
我修改了程序,不继承PrintDocument,使用PrintDocument.PrintPage+= new PrintPageEventHandler。
代码如下:
class A
{
PrintDocument printdoc;
int PageSize_W;
int PageSize_H;

void PrintPage(object send,PrintPageEventArgs e)
{
// MY code
}

void showprintpreviewdialog()
{
printdoc.PrintPage+= new PrintPageEventHandler(PrintPage);
PrintPreviewDialog tDlg=new PrintPreviewDialog();
tDlg.document=printdoc;
tDlg.ShowDialog().
}

A()
{
printdoc=new PrintDocument();
PageSize_W=printdoc.defaultPageSettings.Bounds.Width;
PageSize_H=printdoc.defaultPageSettings.Bounds.Heigt;
}
}

执行代码:
A _a=new A();
private void button4_Click(object sender, System.EventArgs e)
{
a.showprintpreviewdialog();
}

在WIN2K下面运行这样的代码,一切OK,但是在WINXP上运行就有问题了:
第一次a.showprintpreviewdialog();没有问题,关闭预览窗口以后,再执行a.showprintpreviewdialog();
出现如下错误提示:
应用程序中发生了未处理的异常,……
未将对象引用设置到对象的实例。

************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
at System.Windows.Forms.PrintPreviewControl.CalculatePageInfo()
at System.Windows.Forms.Control.InvokeMarshaledCallbacks()

为什么呢,在XP下面有什么不同吗???
fuyun 2006-10-12
  • 打赏
  • 举报
回复
为什么要 override,完全没有必要,重载后你没有调用base吧
xlzxc 2006-10-12
  • 打赏
  • 举报
回复
在showprintviewdialog之前用断点将程序中断,马上按F5继续运行,就一点问题都没有。
但是去掉断点继续运行就不行了。

哪个大哥晓得,能够引发打印错误的有那些原因呢。

在showprintviewdialog 的时候用了try,catch,好象没catch到什么东西哦
JoneG 2006-10-10
  • 打赏
  • 举报
回复
我是用WINFORM做的打印预览,预览多少次都没有问题啊
我没有用你说的那个protected override void OnPrintPage(PrintPageEventArgs e)
我是给PrintDocument 对象pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);
xlzxc 2006-10-10
  • 打赏
  • 举报
回复
将protected override void OnPrintPage(PrintPageEventArgs e)中的代码全部屏蔽了,
错误依旧在!昏了
xlzxc 2006-10-10
  • 打赏
  • 举报
回复
设置了断点进行跟踪调试,
protected override void OnPrintPage(PrintPageEventArgs e)
执行完成以后弹出错误

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧