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