在Windows窗体中修改ComboBox中的项目

时间:2012-03-21 21:05:57

标签: c# .net winforms

我有一个ComboBox,可以显示很长的项目列表。表单上有一个函数需要更改这些项的显示文本而不实际添加或删除任何项。没有数据绑定,我正在直接访问Items列表。

问题是,如果我修改了Items列表中项目的任何属性,它就不会更新组合框中的文本。有一个按钮可以将项目从ComboBox移动到另一个相邻的ComboBox,当它被移动时它会正确显示,所以问题似乎是它没有重绘它。

我尝试过调用Invalidate(),Refresh(),Update(),但它不起作用。我想我可以清除ComboBox并读取所有内容,但是这个框可以容纳数千个项目,所以我不确定这是否是一种有效的方法。

3 个答案:

答案 0 :(得分:1)

请尝试简单地设置组合框文本属性:

combobox1.Text = "newText";

当然你仍然需要像以前一样更改项目。

答案 1 :(得分:0)

似乎无法在没有数据绑定的情况下更新项目标签。所以剩下的就是删除相关项(Items.RemoveAt)并再次插入(Items.Insert)。

答案 2 :(得分:0)

您需要执行以下步骤:

  1. 获取正在考虑的项目的索引
  2. 获取项目显示文本或项目本身
  3. 替换项目显示文字
  4. 将该项目重新插入相同的索引
  5. 这是一个示例代码: (假设您的商品属于字符串类型)

    int itemIndex = comboBox1.Items.IndexOf("yourItem");
    string itemText = comboBox1.Items[itemIndex].ToString();
    itemText = "yourNewString";
    comboBox1.Items.Insert(itemIndex, itemText);
    

    如果项目不是 string 类型,请尝试以下操作:

    int itemIndex = comboBox1.Items.IndexOf(/*your item*/);
    var item = comboBox1.Items[itemIndex];
    //type cast back to the original type
    //change the display text i.e. by changing the display member inside your object
    comboBox1.Items.Insert(itemIndex, item);
    

    如果您的函数为多个项目执行此操作,则可以循环显示此代码段