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)
。您将获得赏金。