2010-07-23 20 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