2011-07-29 11 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(); 
    } 
} 

を固定するためのコードです。 CheckedListBoxにReferenceItemを直接追加したときにうまくいきませんでした。

+0

「C#」で件名を開始しないでください。[SO]のタグがあります。 –

+0

CheckedListBoxのチェックボックスを他の種類のコントロールで置き換えるか、各チェックボックスを別のオブジェクトに関連付けるだけですか? –

答えて

4

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

+0

私はラッパーを使用していないので、いくつかを読んでそれを実装しようとしました。ありがとうございました! –

+0

あなたのアップデートを見て、あなたが問題をどのように修正したかを見て、それを私のやり方で行うのがなぜ違いがあるのか​​よく分かりません。このトリックを使用した文脈では、格納していたアイテムには適切なToStringが実装されていなかったため、追加することは不可能でした。したがって、ラッパーにはテキストが返される個別のプロパティがありました。あなたのケースでは、オブジェクトがすでに適切なToStringを持っていれば、単にリストボックスに追加するだけで、余計な作業をする必要はありませんでした。 – Thomee

関連する問題