C# 系统图及;e、 哈斯莫尔问题
我有几天的时间来解决我在C中遇到的这个大问题: 我正在尝试打印21篇文章(账单)票证格式,但纸卷有限制,占用了几页分页打印,但我无法从一页跳到另一页打印文章#17,并使用#18继续打印另一页,请帮助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;
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