使用循环打印listview打印同一行C#上的所有行

时间:2017-02-19 00:39:21

标签: c# printing

我尝试使用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;

2 个答案:

答案 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了解相关信息。

修改 在此特定情况下,让我撤消关于forforeach 的陈述。由于您的循环在每次迭代期间多次访问数组元素,因此在此示例中,foreach循环将比for循环更快。