ComboBox没有显示文字

时间:2011-08-31 18:55:21

标签: c# .net winforms combobox

我有以下代码,我试图用来填充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;
    }
}

这是我得到的;他们都是空白的:

Screenshot

我做错了什么?

编辑:显然,我的Field类继承自UserControl。我做了一些测试,显然这与类继承System.ComponentModel.Component的事实有关。

2 个答案:

答案 0 :(得分:1)

如果我正在阅读您的代码,那么您正试图将用户控件放在组合框中。

当你这样做时,覆盖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);
}

但我不得不说,我不知道将UserControl放在ComboBox集合中是否是最好的方法。我会认真考虑以不同的方式进行重构。

答案 1 :(得分:0)

您添加到组合框中的项目也应该是字符串,就像在消息框中一样。

尝试:this.cboFields.Items.Add(Field.ToString());

或者,您可以尝试设置DisplayMember字段,但ToString应该已经是默认值:

this.cboFields.DisplayMember = "ToString()"