打印所有列表框项目

Print all listbox items

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

输出应该是这样的:

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

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

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

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

但是,正确的 解决方案是完全删除 StringBuilder 并仅绘制您当前迭代的项目的值:

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

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

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