我正在尝试打印所有列表框项目。
输出应该是这样的:
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;
}
答案 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();
}