我有下面的代码,我试图使用它来填充一个ComboBox,但是它没有显示我要添加的对象的实际文本。
internal partial class SortBox : UserControl {
private Field[] FieldReferences
...
internal Field[] Fields {
...
set {
this.FieldReferences = value;
this.cboFields.Items.Clear();
string NoneString = "(none)";
this.cboFields.Items.Add(NoneString);
this.cboFields.SelectedItem = NoneString;
foreach (Field Field in this.FieldReferences) {
MessageBox.Show(Field.ToString()); // <- This displays what I want displayed perfectly.
this.cboFields.Items.Add(Field);
}
}
}
...
}
public partial class Field : UserControl {
protected string LabelValue;
...
public override string ToString() {
return this.LabelValue;
}
}这是我得到的;它们都是空白的:

我做错了什么?
编辑:显然是,我的字段类是从UserControl继承的。我做了一些测试,这显然与类继承自System.ComponentModel.Component这一事实有关。
发布于 2011-09-03 00:03:55
如果我正确地阅读了您的代码,您将尝试在组合框中放置一个用户控件。
当您这样做时,重写ToString将无法工作,因此要使当前的代码正常工作,只需更改DrawMode:
这样做是可行的:
cboFields.DrawMode = DrawMode.OwnerDrawFixed;
cboFields.DrawItem += new DrawItemEventHandler(cboFields_DrawItem);
private void cboFields_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
if (e.Index > -1)
e.Graphics.DrawString(cboFields.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds);
}但我不得不说,我不知道在ComboBox集合中放置一个ComboBox是否是最好的方法。我会认真考虑不同的重构。
发布于 2011-08-31 18:58:49
添加到组合框中的项也应该是字符串,就像在消息框中一样。
尝试:this.cboFields.Items.Add(Field.ToString());
或者,您可以尝试设置DisplayMember字段,尽管ToString应该已经是默认的:
this.cboFields.DisplayMember = "ToString()"
https://stackoverflow.com/questions/7261977
复制相似问题