2015-03-15 2 views
0

Я пытаюсь распечатать все элементы списка.Печать всех элементов списка

Результат должен быть таким:

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

Прикрепите точку останова на своем 'foreach', и я уверен, что вы можете это понять. –

ответ

1

Ваш StringBuilder никогда не очищается при каждой итерации .. поэтому каждый раз, когда строка обращается он обращается со всем, что ему предшествовало.

Очистка StringBuilder после каждой операции рисования является самым простым решением:

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

Однако правильно решение было бы отбросить StringBuilder вообще и просто нарисовать значение этого пункта вы в настоящее время повторяется для над:

e.Graphics.DrawString(item, .... 
+0

Thankyou очень много! – Dannehkown

1

Если вы делаете sb.Clear() в конце цикла, это сработает.

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

Thankyou очень много! – Dannehkown

Смежные вопросы