Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 系统图及;e、 哈斯莫尔问题_C#_Visual Studio_System.drawing_Invoices - Fatal编程技术网

C# 系统图及;e、 哈斯莫尔问题

C# 系统图及;e、 哈斯莫尔问题,c#,visual-studio,system.drawing,invoices,C#,Visual Studio,System.drawing,Invoices,我有几天的时间来解决我在C中遇到的这个大问题: 我正在尝试打印21篇文章(账单)票证格式,但纸卷有限制,占用了几页分页打印,但我无法从一页跳到另一页打印文章#17,并使用#18继续打印另一页,请帮助 private void DrawItems(System.Drawing.Printing.PrintPageEventArgs e) { int linesprinted = 0; int linesperpage = 17;

我有几天的时间来解决我在C中遇到的这个大问题: 我正在尝试打印21篇文章(账单)票证格式,但纸卷有限制,占用了几页分页打印,但我无法从一页跳到另一页打印文章#17,并使用#18继续打印另一页,请帮助

private void DrawItems(System.Drawing.Printing.PrintPageEventArgs e)
        {
            int linesprinted = 0;
            int linesperpage = 17;
            int numberitems = items.Count; //21

            //numberitems / linespage = 1.23 = 2 Pages True :)

            if (linesprinted <= linesperpage)
            {
                linesprinted++;
                e.HasMorePages = false;
            }
            else {
                linesprinted=0;
                e.HasMorePages = true;
            }

//print items
            OrderItem ordIt = new OrderItem('?');

            gfx.DrawString("C/P   DESCRIPCION                  TOTAL", new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
            DrawEspacio();
            gfx.DrawString(DottedLine(), new Font(fontName, 9, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
            count++;

            foreach (string item in items)
            {

                String ItemCantidad = ordIt.GetItemCantidad(item);
                String ItemPrice = ordIt.GetItemPrice(item);
                Int16 not_equal = 0;


                gfx.DrawString(ItemCantidad + "  x", new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());

                line = ordIt.GetItemUnitPrice(item);
                line = AlignRightText(line.Length) + line;

                gfx.DrawString("                 " + line, printFont, myBrush, leftMargin, YPosition(), new StringFormat());

                string name = ordIt.GetItemName(item);

                leftMargin = 0;
                if (name.Length > maxCharDescription)
                {
                    int currentChar = 0;
                    int itemLenght = name.Length;

                    while (itemLenght > maxCharDescription)
                    {
                        line = ordIt.GetItemName(item);
                        gfx.DrawString("         " + line.Substring(currentChar, maxCharDescription), new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());

                        count++;
                        not_equal++;
                        if (not_equal == 1)
                        {
                            gfx.DrawString(ItemPrice, new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
                        }
                        currentChar += maxCharDescription;
                        itemLenght -= maxCharDescription;
                    }

                    line = ordIt.GetItemName(item);
                    gfx.DrawString("         " + line.Substring(currentChar, line.Length - currentChar), new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
                    count++;
                    gfx.DrawString("-----", new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
                    count++;
                }
                else
                {
                    gfx.DrawString("         " + ordIt.GetItemName(item), new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
                    count++;
                    gfx.DrawString(ItemPrice, new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
                    count++;
                    gfx.DrawString("-----", new Font(fontName, fontSize, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
                    count++;
                }

            } //end foreach


            leftMargin = 0;
            gfx.DrawString(DottedLine(), new Font(fontName, 9, FontStyle.Regular), myBrush, leftMargin, YPosition(), new StringFormat());
            DrawEspacio();

        } //end function
private void DrawItems(System.Drawing.Printing.PrintPageEventArgs e)
{
int linesprint=0;
int linesperpage=17;
int numberitems=items.Count;//21
//numberitems/linespage=1.23=2页真:)
if(LineSprint maxCharDescription)
{
int currentChar=0;
int itemLenght=name.Length;
while(itemLenght>maxCharDescription)
{
line=ordIt.GetItemName(项目);
gfx.DrawString(“+line.Substring(currentChar,maxCharDescription),新字体(fontName,fontSize,FontStyle.Regular),myBrush,leftMargin,YPosition(),new StringFormat());
计数++;
不等于++;
如果(不等于==1)
{
DrawString(ItemPrice,新字体(fontName,fontSize,FontStyle.Regular),myBrush,leftMargin,YPosition(),new StringFormat());
}
currentChar+=maxCharDescription;
ItemLength-=maxCharDescription;
}
line=ordIt.GetItemName(项目);
gfx.DrawString(“+line.Substring(currentChar,line.Length-currentChar)、新字体(fontName,fontSize,FontStyle.Regular)、myBrush、leftMargin、YPosition()、new StringFormat());
计数++;
gfx.DrawString(“----”,新字体(fontName,fontSize,FontStyle.Regular),myBrush,leftMargin,YPosition(),new StringFormat());
计数++;
}
其他的
{
gfx.DrawString(“+ordIt.GetItemName(item),新字体(fontName,fontSize,FontStyle.Regular),myBrush,leftMargin,YPosition(),new StringFormat());
计数++;
DrawString(ItemPrice,新字体(fontName,fontSize,FontStyle.Regular),myBrush,leftMargin,YPosition(),new StringFormat());
计数++;
gfx.DrawString(“----”,新字体(fontName,fontSize,FontStyle.Regular),myBrush,leftMargin,YPosition(),new StringFormat());
计数++;
}
}//结束foreach
leftMargin=0;
DrawString(DottedLine(),新字体(fontName,9,FontStyle.Regular),myBrush,leftMargin,YPosition(),new StringFormat());
空间();
}//结束函数

我认为你做得不对。应该是这样的:

    private void MyPrintDocument_PrintPage(object sender,
        System.Drawing.Printing.PrintPageEventArgs e)
    {
        bool more = DrawItems(e.Graphics);
        if (more == true)
            e.HasMorePages = true;
    }
因此,在
PrintDocument
Print
事件之后,您调用您的方法来绘制项目,并且它跟踪方法外部变量中最后绘制的项目,以便再次调用时知道从何处开始。当涉及到应该转到下一页的项时,它返回true