2016-07-25 72 views
0

我必须打印很多条码。我怎样才能做一个循环,如果我用这个代码块打印一个条形码:如何在循环中打印许多图形对象?

p.PrintPage += delegate(object sender1, PrintPageEventArgs e1) { 
        e1.Graphics.DrawString("TITLE", new Font("Univers 55", 6), new SolidBrush(Color.Black), new RectangleF(titleX, titleY, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height)); 
        e1.Graphics.DrawString(s, new Font("Barcode", 24), new SolidBrush(Color.Black), new RectangleF(codeX, codeY, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height)); 
        e1.Graphics.DrawString(test, new Font("Univers 55", 8), new SolidBrush(Color.Black), new RectangleF(numberX, numberY, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height)); 

};

titleXTitley的codeX的codeY的numberXnumberY是存储每个条形码的对象(标题,条纹和数目)的三个部分的位置变量,它们应该循环改变自己。

+1

把它放在一个函数中,并在循环中调用该函数? –

回答

2

如果你想在一个页面上打印多个条形码,没有什么能阻止你把它们放在一个循环中。我虽然代码移到一个单独的方法,而不是一个“在线委托”,以保持清洁:

p.PrintPage += PrintPage; 
... 
private void PrintPage(object sender, PrintPageEventArgs e) 
{ 
    for (int i = 0; i < numberOfBarcodes; i++) 
    { 
     int titleY = i * titleYdistance + titleYoffset; 
     // etc. 

     e.Graphics.DrawString(...); 
     // etc. 
    } 
} 

如果您有什么会适合在一个页面上越多,PrintPageEventArgs类有一个HasMorePages属性。只要您将此属性设置为true,就可以调用事件方法,从而允许您为每个页面打印不同的条形码。

+0

谢谢!我仍在尝试:) – relapse

+0

'HasMorePages'属性不起作用。我应该在哪里设置它? – relapse

+0

@relapse您不需要“设置它”,您需要弄清楚是否可以将所有内容放在一个页面上,如果它不能将其设置为“true”并尽早摆脱循环。这将导致该函数再次被调用第二页。你重复这个过程,直到你用完条码来打印,然后你把它设置为假。请参阅[如何在Windows窗体中打印多页文本文件](https://msdn.microsoft.com/zh-cn/library/cwbe712d(v = vs.110).aspx),以获取示例作品中,每当你需要记住你最后一个'i'时,'i'就是'0',并以+1作为起点。 –