'.NET'에 해당되는 글 2건

  1. 2008.12.25 ListBox에서 Item 다시 그리기
  2. 2008.10.30 .NET의 Type Reflection
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()를 호출하여서 다시 그리게 하여야합니다..
Posted by orange code
TAG .NET, c#

Visual Studio도 MSDN도 없이 C# 프로그래밍을 한 적이 있습니다. (인터넷도 안됩니다..)
csc와 메모장만으로 프로그래밍을 했었는데 그 때 제가 알고 있던 System.Reflection의 기능들 덕분에 많은 일이 가능했습니다..
알고 있던건 내용으로 우선 typeof로 Type 개체를 가져오고 GetMethods, GetProperties등의 함수로 타입들의 함수, 속성, 이벤트등을 알수 있었습니다. 그래서 이 기능을 이용해서 닷넷 dll을 다 읽어와 모든 타입의 정보를 html로 저장해버렸고, 원하는 타입의 함수, 속성등을 찾아볼 수 있게 되었습니다.
하지만 html파일에 없는 정보를 알고 싶을때는 프로그램을 수정하여 다시 html를 만들어야했기 때문에 시간이 오래걸렸습니다. 그래서 나중에는 System.Net 에 있는 소켓을 사용하여 작은 웹서버를 만들어 원하는 타입의 이름을 입력하면 즉석에서 정보를 가져와 보여주도록 했고, 이것으로 html을 매번 만들필요도 없어졌습니다.

그렇다면 그런 일을 가능하게 해준 이 기능은 어떻게 쓰는 것인가...

일단 Type의 개체는 typeof(타입이름) 혹은 변수.GetType()으로 가져올 수 있습니다.

Type type = typeof(string);

string str = "abc";
Type type = str.GetType();

설명은 일단 MSDN으로 대체합니다.

Posted by orange code

티스토리 툴바