我自己写了OnPrintPage事件,然后预览很正常是两页,为什么点击预览窗口中的打印后,怎么总是打印最后一页,而且页码还是3
PrintDoc = new PrintDocument();
PrintDoc.PrintPage += new PrintPageEventHandler(this.OnPrintPage);
PrintDoc.DocumentName=_Title;
previewDialog.Document = PrintDoc;
previewDialog.ShowDialog();
previewDialog.Dispose();
为什么点击打印却打的与预览的不一样。
PrintDoc = new PrintDocument();
PrintDoc.PrintPage += new PrintPageEventHandler(this.OnPrintPage);
PrintDoc.DocumentName=_Title;
previewDialog.Document = PrintDoc;
previewDialog.ShowDialog();
previewDialog.Dispose();
为什么点击打印却打的与预览的不一样。
{
while(true)
{
//PageInitialize() 以下2行
LeavePageHeight=AvailablePageHeight;
Current_Y=_PageSetup.Margin_Top ;
if (Page==0)
{
//ReportInitialize(); 以下5行
Offset_X=_PageSetup.Margin_Left ;
RecordNumber=_Content.Count ;
Page=0;
CurrentRecord=0;
AvailablePageHeight=_PageSetup .Paper_Height-_PageSetup.Margin_Top -_PageSetup.Margin_Bottom ;
Page++;
#region Title
if (_Title ._RowHeight>0)
{
PrintTitle(e);
LeavePageHeight-=_Title ._RowHeight ;
Current_Y+=_Title ._RowHeight ;
}
#endregion
#region ReportHeader
if (LeavePageHeight>=_ReportHeader ._RowHeight )
{
if (_ReportHeader._RowHeight>0)
{
PrintReportHeader(e);
LeavePageHeight-=_ReportHeader._RowHeight ;
Current_Y+=_ReportHeader._RowHeight ;
}
}
#endregion
#region PageHeader and Frame
if (LeavePageHeight>=this._LineFrame ._RowHeight )
{
if (_PageHeader._RowHeight >0)
{
PrintPageHeaderText(e);
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
}
#endregion
#region Detail and Frame
while (LeavePageHeight>=this._LineFrame ._RowHeight && CurrentRecord<RecordNumber)
{
PrintPageDetail(e);
CurrentRecord++;
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
#endregion
}
else
{
Page++;
if (LeavePageHeight>=this._LineFrame ._RowHeight )
{
if (_PageHeader._RowHeight >0)
{
PrintPageHeaderText(e);
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
}
while (LeavePageHeight>=this._LineFrame ._RowHeight && CurrentRecord<RecordNumber)
{
PrintPageDetail(e);
CurrentRecord++;
PrintPageFrame(e);
LeavePageHeight-=_LineFrame ._RowHeight ;
Current_Y+=_LineFrame ._RowHeight ;
}
} if (CurrentRecord<RecordNumber)
{
e.HasMorePages =true; }
else
{
if (_ReportTailer._RowHeight >0)
{
PrintReportTailer(e);
}
e.HasMorePages =false;
Page=0;
break;
}
if (Page>=FromPage && Page<=ToPage)
{
if (Page==ToPage) e.HasMorePages =false;
break;
} }
}
在这个函数的最后:
if(line != null)
ev.HasMorePages = true;
else
{
ev.HasMorePages = false;
stream.Seek(0,SeekOrigin.Begin); ///一定要加这一句,因为OnPrintPage在预览的时候也会被调用
}