2012-03-21 73 views
0

我有一个ComboBox可以显示一长串项目。表单上有一个功能,需要更改这些项目的显示文本,而无需实际添加或删除任何项目。没有数据绑定正在进行,我直接访问Items列表。在Windows窗体中修改ComboBox中的项目

问题是,如果我修改项目列表中项目的任何属性,它不会更新组合框中的文本。有一个按钮可以将一个项目从ComboBox移动到另一个相邻的ComboBox,当它移动时它会正确显示,所以问题似乎只是它不重绘它。我试过调用Invalidate(),Refresh(),Update(),但它不起作用。我想我可以清除组合框并读取所有内容,但是此框可以容纳数千个项目,因此我不确定这是否是一种有效的方法。

+2

请问您可以添加一些代码?此外,你说它被移动时它显示正确。但是,不是你的问题,它不正确显示?也许我错过了什么。 – 2012-03-21 21:10:19

+0

组合框是否绑定到数据源?该数据源中的项目是否实现INotifyPropertyChanged? – Reddog 2012-03-21 21:14:08

+0

你可以显示1.什么类型的项目你添加到组合框2.代码,管理将其成功移动到另一个组合框3.更新属性的代码4.如何确定哪些属性用于显示在ComboBox – kaj 2012-03-21 21:18:00

回答

0

请尽量简单的设置组合框文本属性:

combobox1.Text = "newText"; 
当然

,你仍然需要更改的项目如前。

0

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

0

你需要做以下步骤:

  1. 获得该项目的索引考虑
  2. 获得该项目显示文本或项目本身
  3. 更换的项目显示文本
  4. 插入该项目返回相同索引

这里是一个示例代码: (假设你的它EMS是型)

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

的,如果项目以外类型的请尝试以下操作:

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

您可以循环在此代码段,如果你的函数做它多个项目

相关问题