2011-07-29 2 views
4

CheckedListBox 목록 상자에 항목을 추가 할 때 다른 개체에 대한 참조를 저장하려고합니다. CheckedListBox에이 객체의 새 인스턴스를 추가하려고했습니다.(CheckedListBox) .Items.Add()에 대한 사용자 지정 개체 사용

public class CheckedListBoxExtention : CheckedListBox 
{ 
    private ReferenceItem _referenceItem; 
    public ReferenceItem storedItem 
    { 
     get { return _referenceItem; } 
     set { _referenceItem = value; } 
    } 
    public CheckedListBoxExtention(ReferenceItem storedItem) 
    { 
     _referenceItem = storedItem; 
    } 
} 

이 작동 나중에 CheckedListBox의 항목 내가 _referenceItem 개체에 대한 참조를 가지고 있지만 내가 foreach는 때. 그러나이 항목을 추가 할 때 CheckedListBox는 공백 (GUI 자체의 목록)으로 표시됩니다. 그래서 항목 텍스트 나 그와 비슷한 것을 재정의 할 방법을 찾으려고합니다.


내가 래퍼에 조금 새로운 오전 문제

class ReferenceItemWrapper 
{ 
    private ReferenceItem _item; 
    public ReferenceItemWrapper(ReferenceItem item) 
    { 
     _item = item; 
    } 
    public ReferenceItem getItem 
    {get {return _item;}} 
    public override string ToString() 
    { 
     return _item.ToString(); 
    } 
} 

를 해결하는 데 사용되는 코드입니다. CheckItListBox에 직접 ReferenceItem을 추가 할 때 작동하지 않을 때 랩으로 처리 한 후 정확히 작동 한 이유는 무엇입니까?

+0

"C#"으로 제목을 시작하지 마십시오. [SO]에 태그가 있습니다. –

+0

CheckedListBox의 확인란을 다른 종류의 컨트롤로 바꾸려면 각 확인란을 다른 개체와 연결하기를 원합니까? –

답변

4

CheckedListBox는 목록에있는 개체의 ToString 메서드를 사용하여 상자에 캡션을 채 웁니다. CheckedListBox를 확장하는 대신 참조 및 캡션을 모두 저장할 수있는 래퍼 클래스를 만들고 캡션을 반환하는 ToString 메서드를 구현합니다. 랩퍼 오브젝트 중 하나를 작성하고 텍스트를 스틱에 넣은 다음 레퍼런스를 스틱에 넣은 다음 랩퍼 오브젝트를 목록 상자에 추가하십시오.

+0

랩퍼를 사용하지 않았기 때문에 일부를 읽고 구현하기 위해 노력했습니다. 고맙습니다! –

+0

업데이트를보고 문제를 수정 한 방법을 보여 주면서 왜 내 방식으로 차이를 만들었는지 잘 모르겠습니다. 이 트릭을 사용한 맥락에서, 저장하고 있던 아이템에는 적절한 ToString 구현이 없었고, 추가하는 것이 불가능했기 때문에 래퍼에 텍스트가 반환되는 별도의 속성이있었습니다. 귀하의 경우에는, 개체가 이미 적절한 ToString을 가지고 있다면, 단순히 목록 상자에 추가하는 것은 특별한 노력 없이도 효과가 있었을 것입니다. – Thomee

관련 문제