打印所有列表框项目

时间:2015-03-15 10:37:06

标签: c# listbox

我正在尝试打印所有列表框项目。

输出应该是这样的:

asd

qweasd

asdkjh

但是会发生什么:

asd

asdqweasd

asdqweasdasdkjh

这是我的代码。

        a = bname.Items;
        var sb = new StringBuilder();
        e.Graphics.DrawString("Book", fontm, Brushes.Black, 20, 170);
        foreach (var item in a)
        {
            sb.AppendFormat("{0}", item.ToString());
            e.Graphics.DrawString(sb.ToString(), fonta, Brushes.Black, 20, x);
            x += 20;
        }

2 个答案:

答案 0 :(得分:1)

你的StringBuilder永远不会在每次迭代时被清除..所以每次绘制字符串时都会绘制它之前的所有内容。

每次绘图操作后清除StringBuilder是最简单的解决方案:

e.Graphics.DrawString....
sb.Clear() // <-- this

然而,正确的解决方案是完全放弃StringBuilder并只绘制您当前正在迭代的项目的值:

e.Graphics.DrawString(item, ....

答案 1 :(得分:1)

如果在循环结束时执行sb.Clear(),它将起作用。

    {
        sb.AppendFormat("{0}", item.ToString());
        e.Graphics.DrawString(sb.ToString(), fonta, Brushes.Black, 20, x);
        x += 20;
        sb.Clear();  
    }