c#组合框,使用值和文本保存项目

c#组合框,使用值和文本保存项目,c#,combobox,C#,Combobox,我试图将一个包含文本和值的对象项添加到组合框中,以便以后阅读 public partial class Form1 : Form { ComboboxItem item; public Form1() { InitializeComponent(); comboBox1.Items.Add(new ComboboxItem("Dormir", 12).Text); } private void button1_Click

我试图将一个包含文本和值的对象项添加到组合框中,以便以后阅读

public partial class Form1 : Form
{
    ComboboxItem item;
    public Form1()
    {
        InitializeComponent();

        comboBox1.Items.Add(new ComboboxItem("Dormir", 12).Text);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        ComboboxItem c = (ComboboxItem)comboBox1.SelectedItem;
        label1.Text = c.Text;
        label2.Text = c.Value.ToString();
    }
}
问题是,我无法添加完整项,因为它不是字符串…并在单击事件开始时给出异常


额外资料: 这个ComboboxItem是我用两个参数创建的一个类,string和int

public class ComboboxItem
{
    public string Text { get; set; }
    public object Value { get; set; }

    public ComboboxItem(string texto, double valor)
    {
        this.Text = texto;
        this.Value = valor;
    }
}

您不需要在(“文本”、“值”)的末尾添加.Text

因此,将其添加为:

comboBox1.Items.Add(new ComboBoxItem("dormir","12"));

通过创建自己的ComboBoxItem类,您的思路是正确的

public class ComboboxItem
{
    public string Text { get; set; }
    public object Value { get; set; }

}
有两种方法可以使用它(除了构造函数): 方法1:

private void button1_Click(object sender, EventArgs e)
{
    ComboboxItem item = new ComboboxItem();
    item.Text = "Item text1";
    item.Value = 12;

    comboBox1.Items.Add(item);
}
方法2:

private void button1_Click(object sender, EventArgs e)
{
    ComboboxItem item = new ComboboxItem 
    { 
         Text = "Item text1",
         Value = 12
    };

    comboBox1.Items.Add(item);
}
你试过这样添加它吗?然后,当您取出该项目时,只需将其作为ComboboxItem进行转换:)

备选KeyValuePair:

comboBox1.Items.Add(new KeyValuePair("Item1", "Item1 Value"));
基于返回符号字符串值和其他组合框答案的问题。。 您可以(应该)在其他位置设置displaymember和valuemember,但是

public Form1()
    {
        InitializeComponent();
        comboBox1.DisplayMember="Text";
        comboBox1.ValueMember ="Value";
        comboBox1.Items.Add(new ComboboxItem("Dormir", 12));
    }

创建ComboboxItem类并重写ToString方法。 将调用ToString方法来可视化该项。默认情况下,ToString()返回类型名

public class ComboboxItem
{
   public object Value{get;set;}
   public string Text {get;set;}

   public override string ToString(){ return Text; }
}
然后,您可以执行以下操作:

var item = new CombobxItem { Value = 123, Text = "Some text" };
combobox1.Items.Add(item);

值不在文本之前,这里是:它只是ComboBoxItem的ctor。这样,在我的combobox上,将显示“WindowsFormsApplication1.ComboxItem”,而不是“text”。我不明白您的观点@user3249619我提供的代码应该是什么suffice@user3249619您是否有类似于
comboBox1.DisplayMember=“Text”的内容;comboBox1.ValueMember=“Value”
@user3249619您的意思是,要隐藏该值吗?如果我选择“comboBox1.Items.Add(item);”,则在我的ComboxBox上不会显示“item text1”,而是显示“WindowsFormsApplication1.ComboxItem”“您总是可以传入一个KeyValuePair?您可以将您的答案链接到这里吗?”?谢谢这就是我真正想要的!,也许我的英语不好。。我想添加一个项目,但显示文本;)
var item = new CombobxItem { Value = 123, Text = "Some text" };
combobox1.Items.Add(item);