2017-03-06 102 views
1

我试图从列表框中获取所有值,然后打印值作为收据,我试图通过foreach循环获取列表框中的所有值,但在打印预览中,它只有1值显示。从c列表框中打印项目#

这里是我的代码:

foreach (object items in listBox1.Items) 
     { 
      Ticket tkt = new Ticket(); 
      tkt.orders = items.ToString(); 
      tkt.print(); 
     } 

,这里是我的代码从票务类:

PrintDocument pdoc = null; 
     String Name, Order, 
     public String orders 
    { 
     //set the person name 
     set { this.Order = value; } 
     //get the person name 
     get { return this.Order; } 
    }public Ticket(String Orders) 
    { 

     this.orders = Orders; 

    } 
public void print() 
    { 
     PrintDialog pd = new PrintDialog(); 
     pdoc = new PrintDocument(); 
     PrinterSettings ps = new PrinterSettings(); 
     Font font = new Font("Courier New", 15); 


     PaperSize psize = new PaperSize("Custom", 100, 200); 
     //ps.DefaultPageSettings.PaperSize = psize; 



     pd.Document = pdoc; 
     pd.Document.DefaultPageSettings.PaperSize = psize; 
     //pdoc.DefaultPageSettings.PaperSize.Height =320; 
     pdoc.DefaultPageSettings.PaperSize.Height = 820; 

     pdoc.DefaultPageSettings.PaperSize.Width = 520; 

     pdoc.PrintPage += new PrintPageEventHandler(pdoc_PrintPage); 

     DialogResult result = pd.ShowDialog(); 
     if (result == DialogResult.OK) 
     { 
      PrintPreviewDialog pp = new PrintPreviewDialog(); 
      pp.Document = pdoc; 
      result = pp.ShowDialog(); 
      if (result == DialogResult.OK) 
      { 
       pdoc.Print(); 
      } 
     } 

    } 
     void pdoc_PrintPage(object sender, PrintPageEventArgs e) 
    { 
     Graphics graphics = e.Graphics; 
     Font font = new Font("Courier New", 10); 
     float fontHeight = font.GetHeight(); 
     int startX = 50; 
     int startY = 55; 
     int Offset = 40; 
      Offset = Offset + 20; 
     String Orders = this.orders; 
     graphics.DrawString("Orders :" + orders, new Font("Courier New", 10), new SolidBrush(Color.Black), startX, startY + Offset); 
} 

在此先感谢

+0

也许for循环过得太快,那么你没看到那些前打印。 'ShowDialog'也可能会阻止for循环 –

回答

1

这是永远不会做你想做的。

该代码基本上说

for each item in the listbox 
    create a new ticket 
    set the string property to item[x].Value.ToString 
    print it as it is 
    x++ 
next 

你需要像

Ticket tkt = new Ticket();  
foreach (object ticItems in listBox1.Items) 
      { 
       var order = new order{item = ticItems.ToString} 
       tkt.orders.Add(order) 
      } 
tkt.print(); 

即:

  • 创建一个新的票
  • 将每个项目的订单财产 应该是(List<string>
  • 再经过它是所有加载打印出来