e.hasMorePages有一个用法

最后都变了- 提交于 2020-04-18 14:35:09

这是下面这个老哥写的,只是写代码太乱,我给整理一下

 

在打印时,经常用到printPage函数,但是,其中换页打印是令人头痛的问题,经常用了e.HasMorePages = true; 语句之后,所有页面都是重复第一页,

因为e.HasMorePages = true是重新调用printDocument1_PrintPage,

所以每次调用都是从头开始,才会出现所有页面的内容都一样,下面是自己解决这个问题的一个方法:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){
    int index=1;
    switch (index)//控件打印的页码             
    {                
        case 1:
            index++;
            //...一页打印完之后
            e.HasMorePages = true;
            break;
        case 2:
            index++;
            //...一页打印完之后
            e.HasMorePages = true;
            break;
        case 3:
            index++;
            //...一页打印完之后
            e.HasMorePages = true;
            break;
        case 4:
            index++;
            e.HasMorePages = false;
            break;
    }
} 

————————————————
版权声明:本文为CSDN博主「charcle」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/charcle/java/article/details/2291633

下面是我的一点适应用法

//作用是高度达到一定值返回bool值
        bool DrawRemarkTest(string remark, float xUnit, PointF start, Font font, Graphics g)
        {
            char[] translate = remark.ToArray();
            string tempStr = "";
            float colWidth = 0;
            List<string> rows = new List<string>();
            for (int i = 0; i < translate.Length; i++)
            {
                float charWidth = g.MeasureString(translate[i].ToString(), font).Width;
                if ((colWidth + charWidth) > xUnit)
                {
                    rows.Add(tempStr);
                    tempStr = translate[i].ToString();
                    colWidth = charWidth;
                }
                else
                {
                    colWidth = colWidth + charWidth;
                    tempStr = tempStr + translate[i].ToString();
                }

            }
            if (!string.IsNullOrEmpty(tempStr))
            {
                rows.Add(tempStr);
            }
            float startY = start.Y;
            List<string> rowsCount = new List<string>();
            foreach (var v in rows)
            {
                var count = v.Split('\r');
                rowsCount.AddRange(count);
            }
            //如果超多了100高度直接就写文字,让图去下一页
            if (rowsCount.Count * 15 > 100 && rowsCount.Count * 15 < 200)
            {
                foreach (var v in rows)
                {
                    g.DrawString(v, font, Brushes.Black, new PointF(start.X, startY));
                    startY = startY + 1 + g.MeasureString(v, font).Height;
                }
                return true;
            }
            else if(rowsCount.Count * 15 >= 200)//如果超多了200高度就写一半文字,让剩下的文字和图去下一页
            {
                rows.Clear();
                int i = 0;
                //取出14行,多的放在stream里
                foreach (var v in rowsCount)
                {
                    i++;
                    var temp = v.Replace("\n", "\r\n");
                    if (i < 12)
                    {
                        rows.Add(temp);
                    }
                    else
                    {
                        stream += temp;
                    }
                }
              
                foreach (var v in rows)
                {
                    g.DrawString(v, font, Brushes.Black, new PointF(start.X, startY));
                    startY = startY + 1 + g.MeasureString(v, font).Height;
                }

                return true;
            }
            else { //没有的话那就在当前页写文字和图
                foreach (var v in rows)
                {
                    g.DrawString(v, font, Brushes.Black, new PointF(start.X, startY));
                    startY = startY + 1 + g.MeasureString(v, font).Height;
                }
                startYTemp = startY + 10;
                return false;
            }
        }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!