2011-07-27 1 views
1


私は、UserControlから派生したクラスのオブジェクトをComboBoxコントロールに追加しています。これは、コンボボックスから必要なコントロールに直接アクセスできるので、本当に便利です。
ComboBoxのすべての項目が空の文字列(その背後にある派生したUserControlsはselectedItemを使用して完全にアクセス可能)であることを除いてすべて正常に動作します。
ComboBoxはドロップダウンスタイルとしてDropDownListを使用しますが、修理する。空の文字列を表示するC#:アイテムがUserControlsの場合のComboBoxの不具合?

最小作業例:私は直接

combobox.Items.Add(new TestControl().ToString()); 

を呼び出すと、エントリが "例" である

public class TestControl : UserControl { 
    public override string toString(){ 
     return "Example"; 
    } 
} 

... 
combobox.Items.Add(new TestControl()); 
... 

これはComboBoxコントロールのバグですか、何か問題がありますか? ありがとうございます

+0

のWinForms? WPF? ASP.Net? – SLaks

+0

私はそれがちょうどタイプミスであると確信していますが、大文字の 'T'で' ToString'でなければなりません。 –

+0

こんにちは、これはWindowsフォームです。 – Sebastian

答えて

3

奇数、それは動作するはずです。別の方法としては、あなたのTestControlのプロパティにコンボボックスのDisplayMemberプロパティを設定するには、次のようになります。

通常、コンボボックス内のオブジェクトの表現は、そのオブジェクトのToStringメソッドによって返さ 文字列です。代わりに オブジェクトのメンバーを表示する場合は、DisplayMemberプロパティを の適切なメンバーの名前に設定して、 を表示するメンバーを選択します。

http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.items.aspx(備考セクション)

+0

Stuart Dunkeld、bemused:ありがとう、ありがとう。残念ながら、DisplayMemberの回避策は動作しません。最初にDataSourceプロパティを設定してから、DisplayMemberを "name"に設定しました。これはこれを行う正しい方法ですか?私はまだ空のエントリを取得しています。ありがとう。 – Sebastian

+0

次に、表示する文字列を返す* name *(単純なゲッター/セッター)というユーザーコントロールクラスにプロパティを作成する必要があります。 –

+0

クラスにToString()のオーバーライドを残してから、これを追加することができます: 'public string name {get {return this.ToString(); }} ' –