我尝试使用c#从窗口表单打印收据,它在列表视图中只打印了1行,但是当添加更多行时,它们都打印在纸张的同一行上
如何让它正常打印,一行低于另一行
这是我使用的代码
for (int i = 0; i < listView1.Items.Count; i++)
{
int ii = 1;
ii++;
graphics.DrawString(" " + listView1.Items[i].SubItems[0].Text + listView1.Items[i].SubItems[1].Text + listView1.Items[i].SubItems[2].Text + listView1.Items[i].SubItems[3].Text, new Font("Arial Bold", 11),
new SolidBrush(Color.Black), startX, startY + Offset);
}
Offset = Offset + 20;
答案 0 :(得分:1)
使用ListBox
循环来迭代foreach
控件是一种更好的方法,因为您要浏览所有项目:
foreach(ListViewItem item in listView1.Items)
{
graphics.DrawString(" " + item.SubItems[0].Text + item.SubItems[1].Text + item.SubItems[2].Text + item.SubItems[3].Text, new Font("Arial Bold", 11),
new SolidBrush(Color.Black), startX, startY + Offset);
Offset = Offset + 20;
}
答案 1 :(得分:0)
将行Offset = Offset + 20
放在for
循环中,而不是在结束括号之后。目前,您的循环正在打印所有内容,在完成后,您将递增Offset
。
使用Offset += 20
使其更具可读性也可能更好。
此外,正如其他人建议您使用foreach
循环而不是for
循环,我不同意。 for
循环通常比foreach
循环需要更少的内存,在这种情况下,for
循环更合适。
请see here了解相关信息。
修改强>
在此特定情况下,让我撤消关于for
与foreach
的陈述。由于您的循环在每次迭代期间多次访问数组元素,因此在此示例中,foreach
循环将比for
循环更快。