4

当我将一个项目添加到 CheckedListBox 列表框时,我还想存储对另一个对象的引用。我尝试将此对象的新实例添加到 CheckedListBox。

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

这适用于稍后当我通过 CheckedListBox 中的项目进行 foreach 时,我有一个对 _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时它不起作用时,为什么它被包装后它确实起作用了?

4

1 回答 1

4

CheckedListBox 使用列表中对象的 ToString 方法来填充框中的标题。与其扩展 CheckedListBox,不如创建一个包装类,让您存储引用和标题,并实现返回标题的 ToString 方法。只需创建一个包装器对象,将文本粘贴在其中,将您的引用粘贴在其中,然后将包装器对象添加到列表框中。

于 2011-07-29T22:54:38.590 回答