2016-07-25 14 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)); 

を};

titleXtitleYCODEXcodeYnumberXnumberY各バーコードオブジェクトの三つの部分(タイトル、ストライプと番号)の位置を格納する変数であり、それらループ内で自分自身を変更する必要があります。

+1

関数に入れて関数をループで呼び出すのですか? –

答えて

2

1つのページに複数のバーコードを印刷する場合は、ループ内に複数のバーコードを印刷しないようにすることはできません。私はきれいに保つために、代わりに「インラインデリゲート」の、しかし別のメソッドにコードを移動します:

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. 
    } 
} 

1つのページに収まるだろうか以上のものを持っている場合は、PrintPageEventArgsクラスはHasMorePagesを持っていますプロパティ。このプロパティをtrueに設定している限り、イベントメソッドは呼び出され、ページごとに異なるバーコードを印刷できます。

+0

ありがとう!私はまだ試しています:) – relapse

+0

'HasMorePages'プロパティは機能しません。どこに置いたらいいですか? – relapse

+0

@relapse「ただ設定する」のではなく、「真に」に設定して早期にループから抜け出せない場合は、すべてを1ページに収めることができるかどうかを判断する必要があります。これにより、関数は2ページ目に再び呼び出されます。印刷するバーコードが不足してから間違って設定するまで、そのプロセスを繰り返します。方法については、[How to:Windowsフォームでの複数ページテキストファイルの印刷](https://msdn.microsoft.com/en-us/library/cwbe712d(v=vs.110).aspx)を参照してください。あなたがやった最後の 'i'を覚えて、その+ 1を始点として使う必要があるたびに、' i'が '0'になるようにしてください。 –

関連する問題