2010-07-23 21 views
2

我有以下代碼:組合框沒有要求MyClass.ToString()

public partial class Form1 : Form 
{ 
    public BindingList<Class> List = new BindingList<Class>(); 

    public Form1() 
    { 
     InitializeComponent(); 
     List.Add(new Class()); 
     comboBox1.DataSource = List; 
    } 
} 

public class Class : Dictionary<string, string> 
{ 
    public override string ToString() 
    { 
     return "Class"; 
    } 
} 

的問題是,組合框顯示文本,而不是「類」「(集合)」。每當我刪除Dictionary<string, string>作爲Class的祖先時,代碼顯示的「Class」就像我希望的那樣。即使當我從另一個基類中派生出來時,我自己也寫了它,它工作正常。這當然不是真正的計劃,而是孤立的問題。所以我錯過了什麼,或者我沒有其他選擇,除了在Class中聲明Dictionary<string, string>字段而不是繼承它的子類? (哦,對了,我已經嘗試添加在ToString功能斷點,它不被調用。)

回答

4

你可以試試這個:

comboBox1.FormattingEnabled = false; 

我已經嘗試過了,現在組合框顯示文本「類」,而不是「(集合)」。

+1

如果Control.FormattingEnabled標誌爲true,.NET數據綁定實現會自動爲您設置集合類的格式。如果你想要一個擴展的解釋,看看: http://msdn.microsoft.com/en-us/library/aa480734.aspx – Matt 2010-07-23 21:05:55

+0

這是完美的。感謝你們 – Juan 2010-07-23 21:13:24

1

你可以聲明自己BindingList子類,還覆蓋ToString()並返回之一的ToString()值的元素:

public class MyBindingList<T> : BindingList<T> 
{ 
    public override string ToString() 
    { 
     if (this.Count == 0) 
     { 
      return "Empty BindingList"; 
     } 

     return "BindingList of " + this[0].ToString(); 
    } 
} 

就用MyBindingList,你在代碼中使用BindingList