2011-07-29 68 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; 
    } 
} 

這工作在後來當我foreach雖然在CheckedListBox中的項目我有_referenceItem對象的引用。但是,當我添加這樣的項目時,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(); 
    } 
} 

的代碼。爲什麼它在包裝完成後無法正常工作?當我將ReferenceItem直接添加到CheckedListBox中時?

+0

請不要使用「C#」開始您的主題行 - 這就是我們在[SO]標記的內容。 –

+0

您是否想將CheckedListBox中的複選框替換爲其他類型的控件,或者您只想將每個複選框與不同的對象關聯起來? –

回答

4

CheckedListBox使用列表中對象的ToString方法來填充框中的標題。而不是擴展CheckedListBox,只需創建一個包裝類,讓您存儲引用和標題,並實現返回標題的ToString方法。只需創建一個包裝對象,將其中的文本粘在其中,將引用放入其中,然後將包裝對象添加到列表框中。

+0

我沒有使用包裝,所以我讀了他們一些,並試圖實現它,它的工作。謝謝! –

+0

看着你的更新顯示你如何解決問題,我不太確定爲什麼這樣做是我的方式有所作爲。在上下文中,我使用了這個技巧,我存儲的項目沒有實現一個合適的ToString,並且添加一個ToString是不可行的,所以我的包裝器有一個單獨的屬性供文本返回。在你的情況下,如果對象已經有了合適的ToString,只需將它添加到列表框應該沒有任何額外的努力工作。 – Thomee