比如我有一个数组里面有好多图片的引用,我想把这些图片分页打印出来,怎么实现.
现在我总是只能打印一页.用HasMorePages有时候只能打印一页,有时候进入死循环?还有我进行页面设置后,预览的内容就空了.请大虾指教.

解决方案 »

  1.   

    必须确保 "先设置,后打印",print()调用后出现的打印设置是无效的,因为进程已经启动了.
    以前我打印多页还好,没出什么问题
      

  2.   

    为什么我只能打印一页呢? 请看一下我的代码.预览显示有两页,但是只显示一页.private void printDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
    Graphics g=e.Graphics;

    foreach(TreeNode pageNode in tree.Nodes)
    {
    Image img=(pageNode.Tag as PicturePanel).Image;
    g.DrawImage(img,0,y);

    foreach(TreeNode labelNode in pageNode.Nodes)
    {
    LabelPro label=labelNode.Tag as LabelPro;
    Brush newBrush=new SolidBrush(Color.Blue);
    e.Graphics.DrawString(label.Text,label.Font,newBrush,label.Left,label.Top+label.Height+y);
    newBrush.Dispose(); if(pages>tree.Nodes.Count)
    {
    e.HasMorePages=false;
    }
    else
    {
    e.HasMorePages=true;
    }
    }
    y+=img.Height;
    pages++;
    }
    }
      

  3.   

    http://www.qq166.com/vip.htm?QQ=855965
      

  4.   

    我多页打印是这样控制的,如有打印页数范围则在pagerange=dlg.PrinterSettings.ToPage;取得请记住"先设置,后打印",
    private void OnPrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
      Graphics g=e.Graphics;
      g.PageUnit=GraphicsUnit.Millimeter;
      switch (currentpage)
         {
    case 9999:
    g.DrawString("结束页",zmfont1,Brushes.Black,20f,25f);
    e.HasMorePages=false;
    break;
    default:
    bmp=new Bitmap("d:\\back1.jpg");
    g.DrawImage(bmp,10,0);
    bmp.Dispose();
    e.HasMorePages=true;
             currentpage+=1;
             if (pagerange-currentpage<0 && pagerange!=0)
                currentpage=9999;
    break;
        }
    }
      

  5.   

    我也碰到了:
    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
    for(int i=0;i<10;i++)
    {
    e.Graphics.DrawString(i.ToString()+":a;sdfj;asfjk;asdnfj;asfj;",this.Font,System.Drawing.Brushes.Black,20,130+100*i);
    if(i%3==0)
    e.HasMorePages=true;
    else
    e.HasMorePages=false;
    }
    }
    结果是死循环
      

  6.   

    当你设置e.HasMorePages=true;时
    事件调用结束后,系统会再调用一次该事件
    按照你的写法会不断重复调用的,
    也就是说你需要记录前面一次打印到何处
    从该处继续打印
      

  7.   

    说的更清楚一点,
    不是设置了e.HasMorePages=true后
    它马上就会就会自动开始换页打印