【问题标题】:c# ComboBox, save item with value and textc# ComboBox,用值和文本保存项目
【发布时间】:2014-01-29 16:08:24
【问题描述】:

我正在尝试将带有 TEXT 和 VALUE 的对象 ITEM 添加到 ComboBox 以便稍后阅读

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,它是我用 2 个参数、字符串和 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;
    }
}

【问题讨论】:

    标签: c# combobox


    【解决方案1】:

    您可以(应该)将 displaymember 和 valuemember 设置在另一个地方,但是...

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

    【讨论】:

    • 谢谢!,这就是我真正想要的!,也许我的英语不好..我想添加一个项目但显示文本;)
    【解决方案2】:

    创建 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);
    

    【讨论】:

    【解决方案3】:

    你不需要在 ("text","value") 的末尾添加 .Text

    所以添加为:

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

    【讨论】:

    • value 不在文本之前,这里:它只是 ComboBoxItem 的 ctor。
    • 这样,在我的组合框中会出现“WindowsFormsApplication1.ComboboxItem”而不是“文本”。
    • 我不明白你的意思@user3249619 我提供的代码应该足够了
    • @user3249619 你有类似comboBox1.DisplayMember = "Text"; comboBox1.ValueMember = "Value";
    • @user3249619 你的意思是说,你想隐藏值?
    【解决方案4】:

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

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

    有两种使用方法,(除了构造函数): 方法一:

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

    方法二:

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

    您是否尝试过像这样添加它?然后,当您将 Item 取出时,只需将其转换为 ComboboxItem :)

    ...
    var selectedItem = comboBox1.SelectedItem as ComboboxItem;
    var myValue = selectedItem.Value;
    ...
    

    替代键值对:

    comboBox1.Items.Add(new KeyValuePair("Item1", "Item1 Value"));
    

    基于 returnign 字符串值和其他组合框答案的问题.. ComboBox: Adding Text and Value to an Item (no Binding Source)

    【讨论】:

    • 如果我执行“comboBox1.Items.Add(item);”,在我的组合框中它不会显示“item text1”而是显示“”WindowsFormsApplication1.ComboboxItem”
    • 你总是可以只传入一个 KeyValuePair 吗?
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 2011-07-03
    • 2016-11-22
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多