Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组合框不显示文本_C#_.net_Winforms_Combobox - Fatal编程技术网

C# 组合框不显示文本

C# 组合框不显示文本,c#,.net,winforms,combobox,C#,.net,Winforms,Combobox,我有下面的代码,我正试图用它来填充一个组合框,但它没有显示我要添加的对象的实际文本 internal partial class SortBox : UserControl { private Field[] FieldReferences ... internal Field[] Fields { ... set { this.FieldReferences = value; this.cb

我有下面的代码,我正试图用它来填充一个组合框,但它没有显示我要添加的对象的实际文本

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;
    }
}
内部部分类SortBox:UserControl{
私有字段[]字段引用
...
内部字段[]字段{
...
设置{
this.FieldReferences=值;
this.cboFields.Items.Clear();
字符串NoneString=“(无)”;
this.cboFields.Items.Add(非字符串);
this.cboFields.SelectedItem=NoneString;
foreach(此.FieldReferences中的字段){

MessageBox.Show(Field.ToString());//添加到组合框中的项目也应该是字符串,就像在消息框中一样

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

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


this.cboFields.DisplayMember=“ToString()”

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

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

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


this.cboFields.DisplayMember=“ToString()”

如果我读对了您的代码,您正在尝试将usercontrol放入组合框中

当您这样做时,重写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);
}

但我不得不说,我不知道把用户控件放在组合框中是不是最好的方法。我会认真考虑重构的不同。

< P>如果我正在读你的代码,你试图把用户控件放在一个组合框中。

当您这样做时,重写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);
}

但我不得不说,我不知道把用户控件放在一个组合框中是不是最好的方法。我会认真考虑重构的不同。

这个解决方案的问题是:<代码> SelectedItem .<代码>将返回一个字符串而不是一个字段对象。这不起作用。HMN,有趣。若要,只要您重写ToString,就会显示正确的文本,您已经根据代码示例中的前一行执行了此操作。请尝试设置?“this.cboFields.SelectedItem将返回字符串…”=>Channele被建议使用正确的解决方案,要获得字段类型,您应该创建一个新的Field实例;@ARZ,我认为您根本不理解我要做什么。我希望SelectedItem返回一个字段,而不是字符串。该解决方案的问题是
this.cboFields.SelectedItem
将返回一个字符串而不是一个字段d对象。这不起作用。嗯,很有趣。根据,只要您重写ToString,就应该显示正确的文本,这是您根据代码示例中的前一行已经完成的。请尝试设置?“This.cboFields.SelectedItem将返回字符串…”=>Channele被建议使用正确的解决方案,要使用字段类型,您应该创建一个新的Field实例;@ARZ,我认为您根本不理解我要做的事情。我希望SelectedItem返回一个字段,而不是字符串。只是几个小问题:只有当DropDownStyle为DropDownList(这正是我所需要的)时,这才有效。否则,列表将填充,但实际选择的项目将为空。此外,不是使用
画笔。黑色
我使用了
新的SolidBrush(e.ForeColor)
。您将获得奖金。只是几个小问题:只有当DropDownStyle为DropDownList(这是我所需要的)时,这才有效。否则,列表将填充,但实际选择的项目将为空。此外,不是使用
画笔。黑色
我使用了
新的SolidBrush(e.ForeColor)
。您将获得赏金。