C# 使用(CheckedListBox.Items.Add()的自定义对象

C# 使用(CheckedListBox.Items.Add()的自定义对象,c#,checkedlistbox,C#,Checkedlistbox,当我向CheckedListBox列表框添加一个项目时,我还想存储对另一个对象的引用。我尝试将此对象的新实例添加到CheckedListBox public class CheckedListBoxExtention : CheckedListBox { private ReferenceItem _referenceItem; public ReferenceItem storedItem { get { return _referenceItem; }

当我向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中的项目时,这将起作用,我引用了uReferenceItem对象。但是,当我添加这样的项目时,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时,它不起作用,为什么它在包装后还能工作?

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

请不要以“C#”开头主题行-这就是我们在的标记。是否要用其他控件替换CheckedListBox中的复选框,或者你只是想把每个复选框和一个不同的对象关联起来?我没有使用包装器,所以我读了一些包装器,并尝试实现它,结果成功了。非常感谢。看着你的更新显示你是如何解决这个问题的,我不太清楚为什么用我的方式做会有不同。在我使用这个技巧的上下文中,我存储的项没有实现合适的ToString,并且添加一个ToString是不可行的,因此我的包装器有一个单独的属性用于返回文本。在您的情况下,如果对象已经有一个合适的ToString,只需将其添加到列表框中就可以了,而无需任何额外的努力。