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 内のアイテムが _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();
    }
}

私はラッパーに少し慣れていません。ReferenceItemをCheckedListBoxに直接追加したときに機能しなかったのに、ラップされた後に正確に機能したのはなぜですか?

4

1 に答える 1

4

CheckedListBoxは、リスト内のオブジェクトのToStringメソッドを使用して、ボックス内のキャプションを設定します。CheckedListBoxを拡張するのではなく、参照とキャプションの両方を格納できるラッパークラスを作成し、キャプションを返すToStringメソッドを実装するだけです。ラッパーオブジェクトの1つを作成し、その中にテキストを貼り付け、その中に参照を貼り付けてから、ラッパーオブジェクトをリストボックスに追加します。

于 2011-07-29T22:54:38.590 に答える