private void printPreviewMenuItem_Click(object sender, System.EventArgs e)
{
this.printPreviewDialog.Document = ((ChildForm)this.ActiveMdiChild).PrintDoc;
this.printPreviewDialog.Document.PrinterSettings = this.printerSettings;
this.printPreviewDialog.Document.DefaultPageSettings = this.pageSettings;
this.printPreviewDialog.DesktopLocation = this.Location;
this.printPreviewDialog.DesktopLocation.Offset(100, 100);
         this.printPreviewDialog.ShowDialog(((ChildForm)this.ActiveMdiChild));
}上面的代码只调出了printPreviewDialog,就显示一张白纸,应该怎么办啊?

解决方案 »

  1.   

    好设置打印页过的
    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    { // 打印信息处理,若没此函数将无法实现打印(无法指定打印页面的一切属性),每打印一页发生一次
    // 获得绘制对象
    Graphics g = e.Graphics;
    // 一页中的行数
    float LinesOfPage = 0;
    // 绘制文本的纵向坐标
    float YPos = 0;
    // 行计数
    int count = 0;
    // 左边界
    float LeftMargin = e.MarginBounds.Left;
    // 顶边界
    float TopMargin = e.MarginBounds.Top;
    // 字符串流
    string line = null;
                // 根据页面的高度和字体的高度决定该页可以打印的行数
    LinesOfPage = e.MarginBounds.Height / this.Font.GetHeight(g); // 获取该绘图环境的字体高度
    StringReader MySReader = new StringReader(this.richTextBox1.Text);
    // 每次从文件中读取一行并打印
    while((count < LinesOfPage) && ((line = MySReader.ReadLine()) != null))
    {
    // 计算这一行的显示位置
    YPos = TopMargin + (count * this.Font.GetHeight(g));
    // 绘制文本
    g.DrawString(line,this.Font,Brushes.Black,LeftMargin,YPos,new StringFormat());
    // 行数添加
    count ++ ;
    }
    // 如果是多行,则另外打印一页
    if(line != null)
    e.HasMorePages = true; // 多页,触发下一次PrintPage事件
    else e.HasMorePages = false;
    }