컴퓨터 프로그래밍2008. 12. 25. 18:14
class Data
{
  public int Item;
  public override string ToString()
  {
    return item.ToString();
  }
}

Data data = new Data();
data.Item = 10;
listBox1.Items.Add(data);
위와 같은 코드를 실행하면 리스트에 10이 잘 나오지만.. 후에 data의 item을 변경해도 리스트에서는 변하지 않는 것을 볼수 있습니다.. 이 것을 해결하려면

속성창에서 DrawMode를 OwnerDrawFixed로 변경하고, DrawItem 이벤트에 대한 함수를 만들고
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
  e.DrawBackground();
  e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font,
    new SolidBrush(e.ForeColor), e.Bounds);
  e.DrawFocusRectangle();
}
이렇게 하면 변경된 값을 제대로 보여주게 됩니다..
주의할점은 리스트가 자동으로 다시 그려지지 않기 때문에.. 아이템의 값이 변경된후에 listBox1.Invalidate()를 호출하여서 다시 그리게 하여야합니다..

'컴퓨터 프로그래밍' 카테고리의 다른 글

C#, 윈도우 시스템 폴더 주소 가져오기  (1) 2009.12.14
WM_MOUSEWHEEL 메시지 받기  (0) 2009.11.17
.NET의 Type Reflection  (0) 2008.10.30
Posted by orange code